Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java

1,506 views
1,395 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,506
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
52
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java

  1. 1. Gerenciamento de Memóriapela Máquina Virtual Java Prof Adriano Teixeira de Souza Fasul – Faculdade Sul Brasil
  2. 2. Gerenciamento de Memória • Alocação de recursos (RAM, cache, virtual, swap, buffer) • Reciclagem • Fragmentação • Recolocação • Compactação • Gerenciamento automático
  3. 3. 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
  4. 4. Gerenciamento de Memória Reciclagem • Colocar um bloco usado como livre • Apontar para null • Depende do tipo de gerenciador
  5. 5. 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
  6. 6. Gerenciamento de Memória • Fragmentação20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 10
  7. 7. 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
  8. 8. 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
  9. 9. Gerenciamento de Memória
  10. 10. 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
  11. 11. Heap HEAP -Xmx2g
  12. 12. 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
  13. 13. Heap YOUNG OLD-XX:MaxNewSize=256m -Xmx2g
  14. 14. 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; }
  15. 15. Heap YOUNG OLD-XX:MaxNewSize=256m -Xmx2g
  16. 16. 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();
  17. 17. Heap YOUNG OLD Perm-XX:MaxNewSize=256m -XX:MaxPermSize=128m -Xmx2g
  18. 18. Heap • Geração Permanente  Não sofre ação de GC  Armazena a estrutura das classes  Armazena informações de reflexão  Não participa do heap (-Xmx)
  19. 19. Heap Eden From Eden To Eden (survivor 1) (survivor 2) Criação de objetos
  20. 20. Heap Eden From Eden To Eden Ocorre um GC na área Young
  21. 21. Heap Eden From Eden To Eden Ocorre outro GC na área Young
  22. 22. Heap To Eden Old Outro GC ocorre, então objetos que contém referência são transportados para a área Old
  23. 23. 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
  24. 24. Algoritmos de GC • Algoritmos diferentes para cada geração • Escolhas entre consumo de CPU e pausas maiores
  25. 25. Algoritmos de GC • Serial • Parallel • Stop the world • Concurrent • Compacting • Non compacting • Copying
  26. 26. Algoritmos de GC • Serial • Parallel
  27. 27. 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
  28. 28. 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
  29. 29. Algoritmos de GC • Atualmente os algoritmos mais usados são  Paralelo • UseParallelGC • UseParallelOldGC  Concorrente • UseConcMarkSweepGC • Um recente algoritmo foi lançado  G1 • Concorrente + paralelo
  30. 30. 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
  31. 31. 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 •
  32. 32. 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 •

×