Memória e Garbage Collection na JVM
-
Upload
eduardo-bohrer -
Category
Technology
-
view
235 -
download
3
Transcript of Memória e Garbage Collection na JVM
Eduardo Bohrer @nbluishttp://about.me/nbluis
Memória e GC na JVM
Garbage collection
Presente nas linguagens modernas
Remove automaticamente objetos não mais utilizados
Para entender o GC precisamos entender a memória e vice e versa
Reference counting
Mais simples
1 fase
Remove objetos que não tem mais referências
Exemplo: Objective-c
Mark and sweep
Mais comum
2 fases
Marca todos os objetos que tem referências
Remove todos os objetos não marcados
Exemplo: Ruby
Generational copying
Hipótese das gerações
95% dos objetos criados tem uma vida extremamente curta, os outros 5% normalmente tem uma vida bastante longa
Young memory
Onde todos os objetos são criados
Quando enche, o GC procura por objetos que ainda tem referências e move para a “Old memory”
Tudo o que sobrar é descartado/ignorado
Old memory
Carrega os objetos “sobreviventes”
Não é afetado pelo “minor collect”
Quando enche, obriga um “major collect” mais conhecido como “full gc”
Nesse caso utilizando Mark and sweep
Benefícios
Aguarda o acúmulo do “young” para fazer gc
Diminui a quantidade de coletas
Diminui a fragmentação da memória
O minor collect roda em uma pequena parte da memória, diminuindo o overhead
Opera apenas sobre os 5% que sobraram e não sobre os 95% que serão ignorados
Generational e a JVM
A JVM extende a estratégia das gerações
Na JVM existem dois tipos de memória
Heap - Memória da aplicação
Non-Heap - Memória da JVM
JVM Heap
Onde ficam todos os objetos do aplicativo
Onde ocorre o famoso “java.lang.OutOfMemoryError: Java heap space”
JVM Non-Heap
Mais conhecida como PermGen
Onde a JVM guarda Classes, Metodos e o StringPool
Onde ocorre o também famoso “java.lang.OutOfMemoryError: PermGen space”
JVM Heap
Segue a estratégia “generational copying”
Porém com a memória dividida em 3 partes
Eden (young)
Survivor
Tenured (old)