2. 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
7. 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
9. 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
10. 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
11. 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
12. 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
13. JVM Heap
Onde ficam todos os objetos do aplicativo
Onde ocorre o famoso
“java.lang.OutOfMemoryError: Java heap space”
14. 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”
15. JVM Heap
Segue a estratégia “generational copying”
Porém com a memória dividida em 3 partes
Eden (young)
Survivor
Tenured (old)