Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java

Post on 22-May-2015

1.291 views 6 download

Transcript of Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java

Gerenciamento de Memória pela Máquina Virtual Java

Prof Adriano Teixeira de Souza

Fasul – Faculdade Sul Brasil

Gerenciamento de Memória

• Alocação de recursos (RAM, cache, virtual, swap, buffer)

• Reciclagem• Fragmentação• Recolocação• Compactação• Gerenciamento automático

Gerenciamento de Memória

Alocação de Recursos• Objetos, estruturas de dados• Blocos de memória• De onde buscar ?RAM fisica, cache, buffer, swap, shared

• Depende da desalocação eficiente

Gerenciamento de Memória

Reciclagem• Colocar um bloco usado como livre• Apontar para null• Depende do tipo de gerenciador

Gerenciamento de Memória

Fragmentação• Blocos não contiguos• Memória disponível espalhado entre pequenos

blocos de memória• É necessário reorganizar e compactar a memória

usada e disponível

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 10

Gerenciamento de Memória

• Fragmentação

Gerenciamento de Memória

Recolocação• Mover dados entre áreas de memória• Colocar os dados mais acessados em estrutura

otimizadas (MRU, LRU, etc.)• Atualizar as referências

Gerenciamento de Memória

Compactação• Evitar fragmentação• Remover espaços não usados de objetos

contiguos• Reorganização da memória usada e não usada

Gerenciamento de Memória

Gerenciamento de Memória

Gerenciamento Automático• Quando o programador não precisa se preocupar

com as tarefas anteriores• Atividades baseadas em padrões de uso da

memória• Também chamado de Garbage Collector

Heap

HEAP

-Xmx2g

Heap

• Larga área de memória que armazena objetos e suas referências

• É dividido em geraçõesGeração Young (ou New ou Eden)Geração Old (Tenured)Geração Permanente (PermGem)

• O GC ocorre apenas quando a geração não tem espaço para alocação de novos objetos

• Automaticamente remove objetos da memória que não possuem referência

• Possui diferentes algoritmos de GC

Heap

YOUNG OLD

-XX:MaxNewSize=256m-Xmx2g

Heap

• Geração YoungOnde novos objetos são alocados A alocação de memória é de curta duraçãoObjetos que não possuem referência são

removidos pelo GCGC ocorre com mais frequência Tamanho pequeno

private String name = “Bruce Lee”;public Result consumidor(Long id) { Result r = processar(id); return r;}

Heap

YOUNG OLD

-XX:MaxNewSize=256m-Xmx2g

Heap

• Geração OldOnde permanecem objetos cujas referências

sobreviveram ao GC da área YoungObjetos de longa duraçãoGC ocorre com menor frequência Tamanho superior à área Young Exemplos:

• Atributos estáticos, final, Singleton

public static String name = “Bruce Lee”;public final Map cache = new HashMap();private static Loader singleton = new Loader();

Heap

YOUNG OLD

-XX:MaxNewSize=256m-Xmx2g

Perm

-XX:MaxPermSize=128m

Heap

• Geração PermanenteNão sofre ação de GCArmazena a estrutura das classesArmazena informações de reflexãoNão participa do heap (-Xmx)

Heap

Eden To Eden(survivor 2)

From Eden(survivor 1)

Criação de objetos

Heap

Eden To EdenFrom Eden

Ocorre um GC na área Young

Heap

Ocorre outro GC na área Young

Eden To EdenFrom Eden

Heap

Outro GC ocorre, então objetos que contém referência são transportados para a área Old

OldTo Eden

Heap

Old

• Na área de memóra Old ocorremRedimensionamento (-Xms ≠ -Xmx)Compactação (desfragmentação) Larga área de memória

para ser monitoradaGC ocorre de acordo com

a política do algorítmo

Algoritmos de GC

• Algoritmos diferentes para cada geração• Escolhas entre consumo de CPU e pausas

maiores

Algoritmos de GC

• Serial• Parallel• Stop the world• Concurrent• Compacting• Non compacting• Copying

Algoritmos de GC

• Parallel

• Serial

Algoritmos de GC

• Stop the world Todas as threads são pausadas Longas pausas

• Concurrent Tarefas de GC efetuadas enquanto a aplicação

funcionaMaior consumo de CPUMenor pausa

Algoritmos de GC

• CompactingRealocar todos os objetos e liberar memória

• Non CompactingApenas libera os blocos de memória

• CopyingCopia os objetos para qualquer área de

memória não prioritária Libera o espaço

Algoritmos de GC

• Atualmente os algoritmos mais usados sãoParalelo

• UseParallelGC • UseParallelOldGC

Concorrente• UseConcMarkSweepGC

• Um recente algoritmo foi lançado G1

• Concorrente + paralelo

• Não chame System.gc organize e reuse seus objetos

• Ao criar estruturas de dados, informe o tamanho new ArrayList(330);

• Use Weak References• Não abuse da concatenação de StringsUse StringBuilder

• Use static quando necessário• Política de limpeza de caches

Dicas

• Em estruturas grandes apontar para null, após o uso

• Configurar os parametros de memória-Xmx -Xms -Xss

• Escolher apropriadamente o algoritmo da geração

• Faça testes de performance• Use ferramentas para auxílio de diagnósticoProfilerMonitoramento

Dicas

• Em estruturas grandes apontar para null, após o uso

• Configurar os parametros de memória-Xmx -Xms -Xss

• Escolher apropriadamente o algoritmo da geração

• Faça testes de performance• Use ferramentas para auxílio de diagnósticoProfilerMonitoramento

Dicas