Gerenciamento de Memória pela JVM

3.191 visualizações

Publicada em

Palestra efetuada na Universidade Católica de Brasília, relacionado ao evento "Escola Regional de Informática do Centro Oeste 1" por Claudio Miranda.

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
3.191
No SlideShare
0
A partir de incorporações
0
Número de incorporações
1.012
Ações
Compartilhamentos
0
Downloads
83
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Gerenciamento de Memória pela JVM

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  13. 13. Gerenciamento de Memória 20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 13
  14. 14. Gerenciamento de Memória 20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 14
  15. 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. 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. 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. 18. Heap HEAP -Xmx2g 20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 18
  19. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 34. Algoritmos de GC • Serial • Parallel 20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 34
  35. 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. 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. 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. 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. 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. 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. 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. 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

×