O documento apresenta os conceitos de gerenciamento de memória pela Máquina Virtual Java, incluindo Garbage Collector, algoritmos de GC e dicas de programação. O palestrante Claudio Miranda explica os conceitos de alocação, reciclagem e fragmentação de memória, as gerações do heap gerenciadas pelo GC, algoritmos como paralelo e concorrente, e dicas para melhorar o desempenho.
1. Gerenciamento de Memória
pela Maquina Virtual Java
Claudio Miranda
Summa Technologies
claudio@summa.com.br
Escola Regional de Informática
Do Centro Oeste 1
2. Objetivo
Explicar os conceitos de gerenciamento
de memória pela Máquina Virtual Java
(JVM), Garbage Collector, Algoritmos
de GC e Dicas de programação.
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 2
3. Quem é Claudio Miranda
Consultor Sênior pela Summa-Tech
Programador open source
Ganhador do prêmio Glassfish Awards 2008
Veste as camisas de arquiteto, consultor
programador.
Palestrante em eventos no Brasil e exterior desde
2001
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 3
4. Agenda
• Gerenciamento de Memória
• Garbage Collector em Java
• Algoritmos de Garbage Collector
• Dicas
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 4
5. Agenda
• Gerenciamento de Memória
• Garbage Collector em Java
• Algoritmos de Garbage Collector
• Dicas
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 5
6. Gerenciamento de Memória
• Alocação de recursos (RAM, cache, virtual, swap,
buffer)
• Reciclagem
• Fragmentação
• Recolocação
• Compactação
• Gerenciamento automático
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 6
7. 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
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 7
8. Gerenciamento de Memória
Reciclagem
• Colocar um bloco usado como livre
• Apontar para null
• Depende do tipo de gerenciador
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 8
9. 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 9
10. Gerenciamento de Memória
• Fragmentação
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 10
11. 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
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 11
12. 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
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 12
15. 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
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 15
16. Gerenciamento de Memória
Gerenciamento Automático
• Java como plataforma, várias linguagens
JPython, JRuby, Rhino, Scala, Groovy
• Presente em outras linguagens
Lisp, Eiffel, Haskell, Scheme
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 16
17. Agenda
• Gerenciamento de Memória
• Garbage Collector
• Algoritmos de Garbage Collector
• Dicas
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 17
18. Heap
HEAP
-Xmx2g
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 18
19. 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
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 19
20. Heap
YOUNG OLD
-XX:MaxNewSize=256m
-Xmx2g
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 20
21. 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;
}
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 21
22. Heap
YOUNG OLD
-XX:MaxNewSize=256m
-Xmx2g
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 22
23. 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();
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 23
24. Heap
YOUNG OLD Perm
-XX:MaxNewSize=256m -XX:MaxPermSize=128m
-Xmx2g
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 24
25. Heap
• Geração Permanente
Pouca ação de GC
Armazena a estrutura das classes
Armazena informações de reflexão
Objetos de origem nativa (JNI)
Não participa do heap (-Xmx)
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 25
26. Heap
Eden From Eden To Eden
(survivor 1) (survivor 2)
Criação de objetos
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 26
27. Heap
Eden From Eden To Eden
Ocorre um GC na área Young
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 27
28. Heap
Eden From Eden To Eden
Ocorre outro GC na área Young
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 28
29. Heap
To Eden Old
Outro GC ocorre, então objetos que contém
referência são transportados para a área Old
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 29
30. 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
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 30
31. Agenda
• Gerenciamento de Memória
• Garbage Collector em Java
• Algoritmos de Garbage Collector
• Dicas
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 31
32. Algoritmos de GC
• Algoritmos diferentes para cada geração
• Escolhas entre consumo de CPU e pausas
maiores
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 32
33. Algoritmos de GC
• Serial
• Parallel
• Stop the world
• Concurrent
• Compacting
• Non compacting
• Copying
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 33
34. Algoritmos de GC
• Serial
• Parallel
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 34
35. 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
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 35
36. 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
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 36
37. Algoritmos de GC
• Atualmente os algoritmos mais usados são
Paralelo
• UseParallelGC
• UseParallelOldGC
Concorrente
• UseConcMarkSweepGC
• Um recente algoritmo foi lançado
G1
• Concorrente + paralelo
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 37
38. Agenda
• Gerenciamento de Memória
• Garbage Collector em Java
• Algoritmos de Garbage Collector
• Dicas
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 38
39. 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
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 39
40. 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
•
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 40
41. 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
•
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 41
42. Muito Obrigado
Claudio Miranda
claudio@claudius.com.br
http://www.summa.com.br
http://www.soujava.org.br
http://www.claudius.com.br
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 42