42
Gerenciamento de Memória pela Maquina Virtual Java Claudio Miranda Summa Technologies [email protected] Escola Regional de Informática Do Centro Oeste 1

Gerenciamento de Memoria JAVA

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Gerenciamento de Memoria JAVA

Gerenciamento de Memória pela Maquina Virtual Java

Claudio MirandaSumma Technologies

[email protected]

Escola Regional de Informática

Do Centro Oeste 1

Page 2: Gerenciamento de Memoria JAVA

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.

Page 3: Gerenciamento de Memoria JAVA

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

Page 4: Gerenciamento de Memoria JAVA

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

Page 5: Gerenciamento de Memoria JAVA

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

Page 6: Gerenciamento de Memoria JAVA

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

Page 7: Gerenciamento de Memoria JAVA

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

Page 8: Gerenciamento de Memoria JAVA

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

Page 9: Gerenciamento de Memoria JAVA

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

Page 10: Gerenciamento de Memoria JAVA

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

Gerenciamento de Memória

• Fragmentação

Page 11: Gerenciamento de Memoria JAVA

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

Page 12: Gerenciamento de Memoria JAVA

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

Page 13: Gerenciamento de Memoria JAVA

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

Gerenciamento de Memória

Page 14: Gerenciamento de Memoria JAVA

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

Gerenciamento de Memória

Page 15: Gerenciamento de Memoria JAVA

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

Page 16: Gerenciamento de Memoria JAVA

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

Page 17: Gerenciamento de Memoria JAVA

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

Page 18: Gerenciamento de Memoria JAVA

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

Heap

HEAP

-Xmx2g

Page 19: Gerenciamento de Memoria JAVA

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

Page 20: Gerenciamento de Memoria JAVA

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

Heap

YOUNG OLD

-XX:MaxNewSize=256m-Xmx2g

Page 21: Gerenciamento de Memoria JAVA

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;}

Page 22: Gerenciamento de Memoria JAVA

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

Heap

YOUNG OLD

-XX:MaxNewSize=256m-Xmx2g

Page 23: Gerenciamento de Memoria JAVA

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();

Page 24: Gerenciamento de Memoria JAVA

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

Page 25: Gerenciamento de Memoria JAVA

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)

Page 26: Gerenciamento de Memoria JAVA

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

Page 27: Gerenciamento de Memoria JAVA

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

Page 28: Gerenciamento de Memoria JAVA

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

Page 29: Gerenciamento de Memoria JAVA

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

Page 30: Gerenciamento de Memoria JAVA

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

Page 31: Gerenciamento de Memoria JAVA

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

Page 32: Gerenciamento de Memoria JAVA

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

Page 33: Gerenciamento de Memoria JAVA

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

Page 34: Gerenciamento de Memoria JAVA

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

Algoritmos de GC

• Parallel

• Serial

Page 35: Gerenciamento de Memoria JAVA

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

Page 36: Gerenciamento de Memoria JAVA

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

Page 37: Gerenciamento de Memoria JAVA

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

Page 38: Gerenciamento de Memoria JAVA

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

Page 39: Gerenciamento de Memoria JAVA

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

Page 40: Gerenciamento de Memoria JAVA

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

Page 41: Gerenciamento de Memoria JAVA

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

Page 42: Gerenciamento de Memoria JAVA

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

Muito Obrigado

Claudio [email protected]

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

http://www.claudius.com.br