Gerenciamento de Memória
pela Máquina Virtual Java
         Prof Adriano Teixeira de Souza




         Fasul – Faculdade Sul Brasil
Gerenciamento de Memória
 • Alocação de recursos (RAM, cache, virtual, swap,
   buffer)
 • Reciclagem
 • Fragmentação
 • Recolocação
 • Compactação
 • Gerenciamento automático
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
Gerenciamento de Memória

 Reciclagem
 • Colocar um bloco usado como livre
 • Apontar para null
 • Depende do tipo de gerenciador
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
Gerenciamento de Memória
     • Fragmentação




20/08/2009   Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1   10
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
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
Gerenciamento de Memória
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
Heap




       HEAP

       -Xmx2g
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
Heap




       YOUNG           OLD




-XX:MaxNewSize=256m
                  -Xmx2g
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;
       }
Heap




       YOUNG           OLD




-XX:MaxNewSize=256m
                  -Xmx2g
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();
Heap




       YOUNG              OLD         Perm




-XX:MaxNewSize=256m       -XX:MaxPermSize=128m
                 -Xmx2g
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)
Heap




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



 Criação de objetos
Heap




       Eden   From Eden   To Eden




 Ocorre um GC na área Young
Heap




       Eden   From Eden   To Eden




 Ocorre outro GC na área Young
Heap




        To Eden             Old




 Outro GC ocorre, então objetos que contém
  referência são transportados para a área Old
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
Algoritmos de GC
 • Algoritmos diferentes para cada geração
 • Escolhas entre consumo de CPU e pausas
   maiores
Algoritmos de GC
 •   Serial
 •   Parallel
 •   Stop the world
 •   Concurrent
 •   Compacting
 •   Non compacting
 •   Copying
Algoritmos de GC


     • Serial



     • Parallel
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
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
Algoritmos de GC
 • Atualmente os algoritmos mais usados são
     Paralelo
       • UseParallelGC
       • UseParallelOldGC
     Concorrente
       • UseConcMarkSweepGC
 • Um recente algoritmo foi lançado
     G1
       • Concorrente + paralelo
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
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
   •
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
   •

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

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