Académique Documents
Professionnel Documents
Culture Documents
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 2
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
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
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
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
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
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
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
Gerenciamento de Memória
• Fragmentação
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 10
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
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
Gerenciamento de Memória
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 13
Gerenciamento de Memória
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 14
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
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
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
Heap
HEAP
-Xmx2g
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 18
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
Heap
YOUNG OLD
-XX:MaxNewSize=256m
-Xmx2g
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 20
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”;
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 21
Heap
YOUNG OLD
-XX:MaxNewSize=256m
-Xmx2g
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 22
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
Heap
-XX:MaxNewSize=256m -XX:MaxPermSize=128m
-Xmx2g
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 24
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
Heap
Criação de objetos
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 26
Heap
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 27
Heap
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 28
Heap
To Eden Old
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 29
Heap
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 30
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
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
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
Algoritmos de GC
• Serial
• Parallel
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 34
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
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
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
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
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
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
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
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