gerenciamento de memoria java
Post on 08-Apr-2015
220 Views
Preview:
DESCRIPTION
TRANSCRIPT
Gerenciamento de Memória pela Maquina Virtual Java
Claudio MirandaSumma Technologies
claudio@summa.com.br
Escola Regional de Informática
Do Centro Oeste 1
20/08/2009 Copyright: Claudio Miranda - Evento 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 3
Quem é Claudio Miranda
Consultor Sênior pela Summa-TechProgramador open sourceGanhador do prêmio Glassfish Awards 2008Veste 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 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
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 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 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 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 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 10
Gerenciamento de Memória
• Fragmentação
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 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 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 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
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 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 16
Gerenciamento de Memória
Gerenciamento Automático• Java como plataforma, várias linguagens
JPython, JRuby, Rhino, Scala, Groovy
• Presente em outras linguagensLisp, Eiffel, Haskell, Scheme
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 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 18
Heap
HEAP
-Xmx2g
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 19
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
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 20
Heap
YOUNG OLD
-XX:MaxNewSize=256m-Xmx2g
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 21
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ênciaTamanho 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 22
Heap
YOUNG OLD
-XX:MaxNewSize=256m-Xmx2g
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 23
Heap
• Geração OldOnde permanecem objetos cujas referências
sobreviveram ao GC da área YoungObjetos de longa duraçãoGC ocorre com menor frequênciaTamanho 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 24
Heap
YOUNG OLD
-XX:MaxNewSize=256m-Xmx2g
Perm
-XX:MaxPermSize=128m
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 25
Heap
• Geração PermanentePouca ação de GCArmazena a estrutura das classesArmazena informações de reflexãoObjetos 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 26
Heap
Eden To Eden(survivor 2)
From Eden(survivor 1)
Criação de objetos
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 27
Heap
Eden To EdenFrom Eden
Ocorre um GC na área Young
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 28
Heap
Ocorre outro GC na área Young
Eden To EdenFrom Eden
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 29
Heap
Outro GC ocorre, então objetos que contém referência são transportados para a área Old
OldTo Eden
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 30
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
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 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 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 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 34
Algoritmos de GC
• Parallel
• Serial
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 35
Algoritmos de GC
• Stop the worldTodas as threads são pausadasLongas pausas
• ConcurrentTarefas de GC efetuadas enquanto a aplicação
funcionaMaior consumo de CPUMenor pausa
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 36
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áriaLibera o espaço
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 37
Algoritmos de GC
• Atualmente os algoritmos mais usados sãoParalelo
• 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 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 39
• Não chame System.gcorganize e reuse seus objetos
• Ao criar estruturas de dados, informe o tamanhonew 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
Dicas
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 40
• 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
ProfilerMonitoramento
•
Dicas
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 41
• 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
ProfilerMonitoramento
•
Dicas
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 42
Muito Obrigado
Claudio Mirandaclaudio@claudius.com.br
http://www.summa.com.brhttp://www.soujava.org.br
http://www.claudius.com.br
top related