Gerenciamento de Memória
pela Maquina Virtual Java
              Claudio Miranda
           Summa Technologies
          c...
Objetivo


      Explicar os conceitos de gerenciamento
      de memória pela Máquina Virtual Java
       (JVM), Garbage C...
Quem é Claudio Miranda
     Consultor Sênior pela Summa-Tech
     Programador open source
     Ganhador do prêmio Glassfis...
Agenda
     •       Gerenciamento de Memória
     •       Garbage Collector em Java
     •       Algoritmos de Garbage Col...
Agenda
     •       Gerenciamento de Memória
     •       Garbage Collector em Java
     •       Algoritmos de Garbage Col...
Gerenciamento de Memória
     • Alocação de recursos (RAM, cache, virtual, swap,
       buffer)
     • Reciclagem
     • F...
Gerenciamento de Memória
     Alocação de Recursos
     • Objetos, estruturas de dados
     • Blocos de memória
     • De ...
Gerenciamento de Memória
     Reciclagem
     • Colocar um bloco usado como livre
     • Apontar para null
     • Depende ...
Gerenciamento de Memória
     Fragmentação
     • Blocos não contiguos
     • Memória disponível espalhado entre pequenos
...
Gerenciamento de Memória
     • Fragmentação




01/09/2009   Copyright: Claudio Miranda - Evento Escola Regional de Infor...
Gerenciamento de Memória
     Recolocação
     • Mover dados entre áreas de memória
     • Colocar os dados mais acessados...
Gerenciamento de Memória
     Compactação
     • Evitar fragmentação
     • Remover espaços não usados de objetos
       c...
Gerenciamento de Memória




01/09/2009   Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oes...
Gerenciamento de Memória




01/09/2009   Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oes...
Gerenciamento de Memória
     Gerenciamento Automático
     • Quando o programador não precisa se preocupar
       com as ...
Gerenciamento de Memória
     Gerenciamento Automático
     • Java como plataforma, várias linguagens
              JPyth...
Agenda
     •       Gerenciamento de Memória
     •       Garbage Collector
     •       Algoritmos de Garbage Collector
 ...
Heap




                                HEAP

                                       -Xmx2g


01/09/2009   Copyright: Cla...
Heap
     • Larga área de memória que armazena objetos e
       suas referências
     • É dividido em gerações
           ...
Heap




             YOUNG                                         OLD




-XX:MaxNewSize=256m
                  -Xmx2g
0...
Heap
     • Geração Young
              Onde novos objetos são alocados
              A alocação de memória é de curta d...
Heap




             YOUNG                                         OLD




-XX:MaxNewSize=256m
                  -Xmx2g
0...
Heap
     • Geração Old
              Onde permanecem objetos cujas referências
               sobreviveram ao GC da área...
Heap




              YOUNG                                         OLD                                         Perm




...
Heap
     • Geração Permanente
              Pouca ação de GC
              Armazena a estrutura das classes
           ...
Heap




             Eden          From Eden To Eden
                           (survivor 1) (survivor 2)



     Criação...
Heap




             Eden          From Eden                      To Eden




     Ocorre um GC na área Young


01/09/200...
Heap




             Eden          From Eden                      To Eden




     Ocorre outro GC na área Young


01/09/...
Heap




             To Eden                                             Old




     Outro GC ocorre, então objetos que ...
Heap

     • Na área de memóra Old ocorrem
             Redimensionamento (-Xms ≠ -Xmx)
              Compactação (desfr...
Agenda
     •       Gerenciamento de Memória
     •       Garbage Collector em Java
     •       Algoritmos de Garbage Col...
Algoritmos de GC
     • Algoritmos diferentes para cada geração
     • Escolhas entre consumo de CPU e pausas
       maior...
Algoritmos de GC
     •       Serial
     •       Parallel
     •       Stop the world
     •       Concurrent
     •     ...
Algoritmos de GC


             • Serial



             • Parallel




01/09/2009       Copyright: Claudio Miranda - Even...
Algoritmos de GC
     • Stop the world
              Todas as threads são pausadas
              Longas pausas

     • C...
Algoritmos de GC
     • Compacting
              Realocar todos os objetos e liberar memória
     • Non Compacting
      ...
Algoritmos de GC
     • Atualmente os algoritmos mais usados são
              Paralelo
               • UseParallelGC
  ...
Agenda
     •       Gerenciamento de Memória
     •       Garbage Collector em Java
     •       Algoritmos de Garbage Col...
Dicas
             • Não chame System.gc
                organize e reuse seus objetos
             • Ao criar estruturas...
Dicas
             • Não abusar de ThreadLocal
             • Use APIs de alocação direta de memória
                Byte...
Dicas
             • Configurar os parametros de memória
               -Xmx -Xms -Xss
             • Escolher apropriadam...
Muito Obrigado

                 Claudio Miranda
             claudio@claudius.com.br

             http://www.summa.com.b...
Próximos SlideShares
Carregando em…5
×

Gerenciamento de Memória pela JVM

5.851 visualizações

Publicada em

Palestra efetuada por Claudio Miranda, na Universidade de Fortaleza (UNIFOR), em 27/agosto/2009. O evento é o VI Ciclo de Palestras do Curso de Ciência da Computação. O evento teve o apoio do JavaCE.

Publicada em: Tecnologia
  • Seja o primeiro a comentar

Gerenciamento de Memória pela JVM

  1. 1. Gerenciamento de Memória pela Maquina Virtual Java Claudio Miranda Summa Technologies claudio@summa.com.br
  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. 01/09/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 01/09/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 01/09/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 01/09/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 01/09/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 01/09/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 01/09/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 01/09/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 9
  10. 10. Gerenciamento de Memória • Fragmentação 01/09/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 01/09/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 01/09/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 12
  13. 13. Gerenciamento de Memória 01/09/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 13
  14. 14. Gerenciamento de Memória 01/09/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 01/09/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 01/09/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 01/09/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 17
  18. 18. Heap HEAP -Xmx2g 01/09/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 01/09/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 19
  20. 20. Heap YOUNG OLD -XX:MaxNewSize=256m -Xmx2g 01/09/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; } 01/09/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 21
  22. 22. Heap YOUNG OLD -XX:MaxNewSize=256m -Xmx2g 01/09/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(); 01/09/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 01/09/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) 01/09/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 01/09/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 01/09/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 01/09/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 01/09/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 01/09/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 01/09/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 01/09/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 01/09/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 33
  34. 34. Algoritmos de GC • Serial • Parallel 01/09/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 01/09/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 01/09/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 01/09/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 01/09/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 01/09/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 39
  40. 40. Dicas • Não abusar de ThreadLocal • Use APIs de alocação direta de memória  ByteBuffer (NIO) • Reutilizar Strings • Em estruturas grandes apontar para null, após o uso  Collections, Arrays 01/09/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 40
  41. 41. Dicas • 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 • 01/09/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 01/09/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 42

×