You are on page 1of 42

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
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
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”;

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
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

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
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

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
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
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
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
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
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

You might also like