Gerenciamento de Memoria JAVA

Preview:

DESCRIPTION

Material sobre o modo como a máquina virtual java gerencia a memoria utilizada pelos aplicações JAVA

Citation preview

Gerenciamento de Memória pela Maquina Virtual Java

Claudio MirandaSumma Technologies

claudio@summa.com.br

Escola Regional de Informática

Do Centro Oeste 1

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 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 3

Quem é Claudio Miranda

Consultor Sênior pela Summa-TechProgramador open sourceGanhador do prêmio Glassfish Awards 2008Veste 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 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 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 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 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 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 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 10

Gerenciamento de Memória

• Fragmentação

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 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 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 13

Gerenciamento de Memória

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 14

Gerenciamento de Memória

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 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 16

Gerenciamento de Memória

Gerenciamento Automático• Java como plataforma, várias linguagens

JPython, JRuby, Rhino, Scala, Groovy

• Presente em outras linguagensLisp, Eiffel, Haskell, Scheme

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 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 18

Heap

HEAP

-Xmx2g

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 19

Heap

• Larga área de memória que armazena objetos e suas referências

• É dividido em geraçõesGeraçã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 20

Heap

YOUNG OLD

-XX:MaxNewSize=256m-Xmx2g

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 21

Heap

• Geração YoungOnde novos objetos são alocados A alocação de memória é de curta duraçãoObjetos que não possuem referência são

removidos pelo GCGC ocorre com mais frequênciaTamanho 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 22

Heap

YOUNG OLD

-XX:MaxNewSize=256m-Xmx2g

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 23

Heap

• Geração OldOnde permanecem objetos cujas referências

sobreviveram ao GC da área YoungObjetos de longa duraçãoGC ocorre com menor frequênciaTamanho 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 24

Heap

YOUNG OLD

-XX:MaxNewSize=256m-Xmx2g

Perm

-XX:MaxPermSize=128m

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 25

Heap

• Geração PermanentePouca ação de GCArmazena a estrutura das classesArmazena informações de reflexãoObjetos 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 26

Heap

Eden To Eden(survivor 2)

From Eden(survivor 1)

Criação de objetos

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 27

Heap

Eden To EdenFrom Eden

Ocorre um GC na área Young

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 28

Heap

Ocorre outro GC na área Young

Eden To EdenFrom Eden

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 29

Heap

Outro GC ocorre, então objetos que contém referência são transportados para a área Old

OldTo Eden

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 30

Heap

Old

• Na área de memóra Old ocorremRedimensionamento (-Xms ≠ -Xmx)

Compactação (desfragmentação)Larga área de memória

para ser monitoradaGC ocorre de acordo com

a política do algorítmo

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 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 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 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 34

Algoritmos de GC

• Parallel

• Serial

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 35

Algoritmos de GC

• Stop the worldTodas as threads são pausadasLongas pausas

• ConcurrentTarefas de GC efetuadas enquanto a aplicação

funcionaMaior consumo de CPUMenor pausa

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 36

Algoritmos de GC

• CompactingRealocar todos os objetos e liberar memória

• Non CompactingApenas libera os blocos de memória

• CopyingCopia os objetos para qualquer área de

memória não prioritáriaLibera o espaço

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 37

Algoritmos de GC

• Atualmente os algoritmos mais usados sãoParalelo

• 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 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 39

• Não chame System.gcorganize e reuse seus objetos

• Ao criar estruturas de dados, informe o tamanhonew 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

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 40

• 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

ProfilerMonitoramento

Dicas

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 41

• 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

ProfilerMonitoramento

Dicas

20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 42

Muito Obrigado

Claudio Mirandaclaudio@claudius.com.br

http://www.summa.com.brhttp://www.soujava.org.br

http://www.claudius.com.br

Recommended