SlideShare ist ein Scribd-Unternehmen logo
1 von 33
Downloaden Sie, um offline zu lesen
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
   •

Weitere ähnliche Inhalte

Andere mochten auch

Andere mochten auch (20)

OS ENTORNOS VIRTUAIS DA REDE SOCIAL MY ENGLISH CLUB E SUAS INTERVENÇÕES NOS A...
OS ENTORNOS VIRTUAIS DA REDE SOCIAL MY ENGLISH CLUB E SUAS INTERVENÇÕES NOS A...OS ENTORNOS VIRTUAIS DA REDE SOCIAL MY ENGLISH CLUB E SUAS INTERVENÇÕES NOS A...
OS ENTORNOS VIRTUAIS DA REDE SOCIAL MY ENGLISH CLUB E SUAS INTERVENÇÕES NOS A...
 
Aula 04-gerenciamento-basico-de-memoria
Aula 04-gerenciamento-basico-de-memoriaAula 04-gerenciamento-basico-de-memoria
Aula 04-gerenciamento-basico-de-memoria
 
Prog web 06-php-oo
Prog web 06-php-ooProg web 06-php-oo
Prog web 06-php-oo
 
Java 15 Jar
Java 15 JarJava 15 Jar
Java 15 Jar
 
Prog web 07-pdo
Prog web 07-pdoProg web 07-pdo
Prog web 07-pdo
 
Java 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoJava 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral Detalhado
 
Easy Rails
Easy RailsEasy Rails
Easy Rails
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducao
 
Java 14 Javadoc
Java 14 JavadocJava 14 Javadoc
Java 14 Javadoc
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Pascal Tipos
Pascal TiposPascal Tipos
Pascal Tipos
 
Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webProg web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_web
 
Web Scale Data Management
Web Scale Data ManagementWeb Scale Data Management
Web Scale Data Management
 
Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011
 
Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011
 
Prog web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosProg web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhos
 
Coding Dojo
Coding DojoCoding Dojo
Coding Dojo
 
Curso Ruby
Curso RubyCurso Ruby
Curso Ruby
 
Responsive web design
Responsive web designResponsive web design
Responsive web design
 
Prog web 08-php-mvc
Prog web 08-php-mvcProg web 08-php-mvc
Prog web 08-php-mvc
 

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

Java Garbage Collectors - HotSpot
Java Garbage Collectors - HotSpotJava Garbage Collectors - HotSpot
Java Garbage Collectors - HotSpotFabiano Santos
 
Gerência de Memória em Java - Parte II
Gerência de Memória em Java - Parte IIGerência de Memória em Java - Parte II
Gerência de Memória em Java - Parte IIHelder da Rocha
 
Gerenciamento de Memória
Gerenciamento de MemóriaGerenciamento de Memória
Gerenciamento de MemóriaCDS
 
C Sharp - Gerenciamento de Memória
C Sharp - Gerenciamento de MemóriaC Sharp - Gerenciamento de Memória
C Sharp - Gerenciamento de MemóriaCDS
 
Gerenciamento de Memória pela JVM
Gerenciamento de Memória pela JVMGerenciamento de Memória pela JVM
Gerenciamento de Memória pela JVMClaudio Miranda
 
Introdução Java virtual machine
Introdução Java virtual machineIntrodução Java virtual machine
Introdução Java virtual machineBruno Coan
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoelliando dias
 
Técnicas avançadas de utilização de GPU e CUDA
Técnicas avançadas de utilização de GPU e CUDATécnicas avançadas de utilização de GPU e CUDA
Técnicas avançadas de utilização de GPU e CUDAJose Ricardo da Silva Junior
 
Alta Performance com Java
Alta Performance com JavaAlta Performance com Java
Alta Performance com JavaAlisson Pedrina
 
Gerência de Memória em Java - Parte I (2005)
Gerência de Memória em Java - Parte I (2005)Gerência de Memória em Java - Parte I (2005)
Gerência de Memória em Java - Parte I (2005)Helder da Rocha
 
TDC2018SP | Trilha Go - Entendendo alocacao de memoria no Go
TDC2018SP | Trilha Go - Entendendo alocacao de memoria no GoTDC2018SP | Trilha Go - Entendendo alocacao de memoria no Go
TDC2018SP | Trilha Go - Entendendo alocacao de memoria no Gotdc-globalcode
 
Imergindo jvm[Apresentação ]
Imergindo jvm[Apresentação ]Imergindo jvm[Apresentação ]
Imergindo jvm[Apresentação ]Otávio Santana
 
JVM and Tools - ESIG Academy
JVM and Tools - ESIG AcademyJVM and Tools - ESIG Academy
JVM and Tools - ESIG AcademyGleydson Lima
 
Como arquiteturas de dados quebram
Como arquiteturas de dados quebramComo arquiteturas de dados quebram
Como arquiteturas de dados quebramGleicon Moraes
 
Gerenciamento de memória cap 03 (ii unidade)
Gerenciamento de memória cap 03 (ii unidade)Gerenciamento de memória cap 03 (ii unidade)
Gerenciamento de memória cap 03 (ii unidade)Faculdade Mater Christi
 
Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM
Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVMFuncionamento e otimização da Garbage Collection na Oracle Hotspot JVM
Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVMAdriano Bonat
 
[MinhaVida TechDay] NoSQL
[MinhaVida TechDay] NoSQL[MinhaVida TechDay] NoSQL
[MinhaVida TechDay] NoSQLCleber Dantas
 
Armazenamento+de+alta+disponibilidade+com+amazon+ebs
Armazenamento+de+alta+disponibilidade+com+amazon+ebsArmazenamento+de+alta+disponibilidade+com+amazon+ebs
Armazenamento+de+alta+disponibilidade+com+amazon+ebsAmazon Web Services LATAM
 

Ähnlich wie Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java (20)

Java Garbage Collectors - HotSpot
Java Garbage Collectors - HotSpotJava Garbage Collectors - HotSpot
Java Garbage Collectors - HotSpot
 
Gerência de Memória em Java - Parte II
Gerência de Memória em Java - Parte IIGerência de Memória em Java - Parte II
Gerência de Memória em Java - Parte II
 
Performance em Java
Performance em JavaPerformance em Java
Performance em Java
 
Gerenciamento de Memória
Gerenciamento de MemóriaGerenciamento de Memória
Gerenciamento de Memória
 
C Sharp - Gerenciamento de Memória
C Sharp - Gerenciamento de MemóriaC Sharp - Gerenciamento de Memória
C Sharp - Gerenciamento de Memória
 
Gerenciamento de Memória pela JVM
Gerenciamento de Memória pela JVMGerenciamento de Memória pela JVM
Gerenciamento de Memória pela JVM
 
Gfs slides
Gfs slidesGfs slides
Gfs slides
 
Introdução Java virtual machine
Introdução Java virtual machineIntrodução Java virtual machine
Introdução Java virtual machine
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Técnicas avançadas de utilização de GPU e CUDA
Técnicas avançadas de utilização de GPU e CUDATécnicas avançadas de utilização de GPU e CUDA
Técnicas avançadas de utilização de GPU e CUDA
 
Alta Performance com Java
Alta Performance com JavaAlta Performance com Java
Alta Performance com Java
 
Gerência de Memória em Java - Parte I (2005)
Gerência de Memória em Java - Parte I (2005)Gerência de Memória em Java - Parte I (2005)
Gerência de Memória em Java - Parte I (2005)
 
TDC2018SP | Trilha Go - Entendendo alocacao de memoria no Go
TDC2018SP | Trilha Go - Entendendo alocacao de memoria no GoTDC2018SP | Trilha Go - Entendendo alocacao de memoria no Go
TDC2018SP | Trilha Go - Entendendo alocacao de memoria no Go
 
Imergindo jvm[Apresentação ]
Imergindo jvm[Apresentação ]Imergindo jvm[Apresentação ]
Imergindo jvm[Apresentação ]
 
JVM and Tools - ESIG Academy
JVM and Tools - ESIG AcademyJVM and Tools - ESIG Academy
JVM and Tools - ESIG Academy
 
Como arquiteturas de dados quebram
Como arquiteturas de dados quebramComo arquiteturas de dados quebram
Como arquiteturas de dados quebram
 
Gerenciamento de memória cap 03 (ii unidade)
Gerenciamento de memória cap 03 (ii unidade)Gerenciamento de memória cap 03 (ii unidade)
Gerenciamento de memória cap 03 (ii unidade)
 
Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM
Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVMFuncionamento e otimização da Garbage Collection na Oracle Hotspot JVM
Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM
 
[MinhaVida TechDay] NoSQL
[MinhaVida TechDay] NoSQL[MinhaVida TechDay] NoSQL
[MinhaVida TechDay] NoSQL
 
Armazenamento+de+alta+disponibilidade+com+amazon+ebs
Armazenamento+de+alta+disponibilidade+com+amazon+ebsArmazenamento+de+alta+disponibilidade+com+amazon+ebs
Armazenamento+de+alta+disponibilidade+com+amazon+ebs
 

Mehr von Adriano Teixeira de Souza

Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Adriano Teixeira de Souza
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasAdriano Teixeira de Souza
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Adriano Teixeira de Souza
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Adriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSAdriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Adriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Adriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Adriano Teixeira de Souza
 

Mehr von Adriano Teixeira de Souza (20)

Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
 
Estrutura de dados em Java - Recursividade
Estrutura de dados em Java - RecursividadeEstrutura de dados em Java - Recursividade
Estrutura de dados em Java - Recursividade
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
 
Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
 
Estrutura de dados - Árvores Binárias
Estrutura de dados - Árvores BináriasEstrutura de dados - Árvores Binárias
Estrutura de dados - Árvores Binárias
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
 

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

  • 1. Gerenciamento de Memória pela Má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
  • 9.
  • 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çã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; }
  • 16. Heap YOUNG OLD -XX:MaxNewSize=256m -Xmx2g
  • 17. 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();
  • 18. Heap YOUNG OLD Perm -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Xmx2g
  • 19. 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)
  • 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 •