3. 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
4. Gerenciamento de Memória
Reciclagem
• Colocar um bloco usado como livre
• Apontar para null
• Depende do tipo de gerenciador
5. 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
6. Gerenciamento de Memória
• Fragmentação
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 10
7. 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
8. 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
11. 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
13. Heap
• Larga área de memória que armazena objetos e
suas referências
• É dividido em gerações
Geraçã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
15. Heap
• Geração Young
Onde novos objetos são alocados
A alocação de memória é de curta duração
Objetos que não possuem referência são
removidos pelo GC
GC ocorre com mais frequência
Tamanho pequeno
private String name = “Bruce Lee”;
public Result consumidor(Long id) {
Result r = processar(id);
return r;
}
17. Heap
• Geração Old
Onde permanecem objetos cujas referências
sobreviveram ao GC da área Young
Objetos de longa duração
GC 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();
18. Heap
YOUNG OLD Perm
-XX:MaxNewSize=256m -XX:MaxPermSize=128m
-Xmx2g
19. Heap
• Geração Permanente
Não sofre ação de GC
Armazena a estrutura das classes
Armazena informações de reflexão
Não participa do heap (-Xmx)
20. Heap
Eden From Eden To Eden
(survivor 1) (survivor 2)
Criação de objetos
21. Heap
Eden From Eden To Eden
Ocorre um GC na área Young
22. Heap
Eden From Eden To Eden
Ocorre outro GC na área Young
23. Heap
To Eden Old
Outro GC ocorre, então objetos que contém
referência são transportados para a área Old
24. Heap
• Na área de memóra Old ocorrem
Redimensionamento (-Xms ≠ -Xmx)
Compactação (desfragmentação)
Larga área de memória
para ser monitorada
GC ocorre de acordo com
a política do algorítmo
Old
25. Algoritmos de GC
• Algoritmos diferentes para cada geração
• Escolhas entre consumo de CPU e pausas
maiores
26. Algoritmos de GC
• Serial
• Parallel
• Stop the world
• Concurrent
• Compacting
• Non compacting
• Copying
28. Algoritmos de GC
• Stop the world
Todas as threads são pausadas
Longas pausas
• Concurrent
Tarefas de GC efetuadas enquanto a aplicação
funciona
Maior consumo de CPU
Menor pausa
29. Algoritmos de GC
• Compacting
Realocar todos os objetos e liberar memória
• Non Compacting
Apenas libera os blocos de memória
• Copying
Copia os objetos para qualquer área de
memória não prioritária
Libera o espaço
30. Algoritmos de GC
• Atualmente os algoritmos mais usados são
Paralelo
• UseParallelGC
• UseParallelOldGC
Concorrente
• UseConcMarkSweepGC
• Um recente algoritmo foi lançado
G1
• Concorrente + paralelo
31. Dicas
• 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 Strings
Use StringBuilder
• Use static quando necessário
• Política de limpeza de caches
32. 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óstico
Profiler
Monitoramento
•
33. 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óstico
Profiler
Monitoramento
•