Download - Gerenciamento de Memoria JAVA
![Page 1: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/1.jpg)
Gerenciamento de Memória pela Maquina Virtual Java
Claudio MirandaSumma Technologies
Escola Regional de Informática
Do Centro Oeste 1
![Page 2: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/2.jpg)
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.
![Page 3: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/3.jpg)
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
![Page 4: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/4.jpg)
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
![Page 5: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/5.jpg)
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
![Page 6: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/6.jpg)
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
![Page 7: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/7.jpg)
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
![Page 8: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/8.jpg)
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
![Page 9: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/9.jpg)
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
![Page 10: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/10.jpg)
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 10
Gerenciamento de Memória
• Fragmentação
![Page 11: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/11.jpg)
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
![Page 12: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/12.jpg)
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
![Page 13: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/13.jpg)
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 13
Gerenciamento de Memória
![Page 14: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/14.jpg)
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 14
Gerenciamento de Memória
![Page 15: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/15.jpg)
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
![Page 16: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/16.jpg)
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
![Page 17: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/17.jpg)
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
![Page 18: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/18.jpg)
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 18
Heap
HEAP
-Xmx2g
![Page 19: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/19.jpg)
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
![Page 20: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/20.jpg)
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 20
Heap
YOUNG OLD
-XX:MaxNewSize=256m-Xmx2g
![Page 21: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/21.jpg)
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;}
![Page 22: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/22.jpg)
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 22
Heap
YOUNG OLD
-XX:MaxNewSize=256m-Xmx2g
![Page 23: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/23.jpg)
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();
![Page 24: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/24.jpg)
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
![Page 25: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/25.jpg)
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)
![Page 26: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/26.jpg)
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
![Page 27: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/27.jpg)
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
![Page 28: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/28.jpg)
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
![Page 29: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/29.jpg)
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
![Page 30: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/30.jpg)
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
![Page 31: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/31.jpg)
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
![Page 32: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/32.jpg)
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
![Page 33: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/33.jpg)
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
![Page 34: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/34.jpg)
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 34
Algoritmos de GC
• Parallel
• Serial
![Page 35: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/35.jpg)
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
![Page 36: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/36.jpg)
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
![Page 37: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/37.jpg)
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
![Page 38: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/38.jpg)
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
![Page 39: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/39.jpg)
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
![Page 40: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/40.jpg)
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
![Page 41: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/41.jpg)
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
![Page 42: Gerenciamento de Memoria JAVA](https://reader034.vdocuments.pub/reader034/viewer/2022042518/5525e66c550346a76e8b4a1d/html5/thumbnails/42.jpg)
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 42
Muito Obrigado
Claudio [email protected]
http://www.summa.com.brhttp://www.soujava.org.br
http://www.claudius.com.br