Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
-
Upload
adriano-teixeira-de-souza -
Category
Documents
-
view
1.291 -
download
6
Transcript of Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
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
20/08/2009 Copyright: Claudio Miranda - Evento Escola Regional de Informática do Centro Oeste 1 10
Gerenciamento de Memória
• Fragmentação
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çõ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
Heap
YOUNG OLD
-XX:MaxNewSize=256m-Xmx2g
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ê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 OldOnde permanecem objetos cujas referências
sobreviveram ao GC da área YoungObjetos de longa duraçãoGC 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
-XX:MaxNewSize=256m-Xmx2g
Perm
-XX:MaxPermSize=128m
Heap
• Geração PermanenteNão sofre ação de GCArmazena a estrutura das classesArmazena informações de reflexãoNão participa do heap (-Xmx)
Heap
Eden To Eden(survivor 2)
From Eden(survivor 1)
Criação de objetos
Heap
Eden To EdenFrom Eden
Ocorre um GC na área Young
Heap
Ocorre outro GC na área Young
Eden To EdenFrom Eden
Heap
Outro GC ocorre, então objetos que contém referência são transportados para a área Old
OldTo Eden
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
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
• Parallel
• Serial
Algoritmos de GC
• Stop the world Todas as threads são pausadas Longas pausas
• Concurrent Tarefas de GC efetuadas enquanto a aplicação
funcionaMaior consumo de CPUMenor pausa
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ária Libera o espaço
Algoritmos de GC
• Atualmente os algoritmos mais usados sãoParalelo
• UseParallelGC • UseParallelOldGC
Concorrente• UseConcMarkSweepGC
• Um recente algoritmo foi lançado G1
• Concorrente + paralelo
• 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 StringsUse 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ósticoProfilerMonitoramento
•
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ósticoProfilerMonitoramento
•
Dicas