SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
Eduardo Bohrer
@nbluis
http://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
Garbage collection
Reference counting
Mark and sweep
Generational copying
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
Mais rebuscado
Multiplas fases
Exemplo: Java
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
Generational copying
Memória dividida em 2 partes
“Young memory”
“Old memory”
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)
JConsole
$JAVA_HOME/bin/jconsole

Mais conteúdo relacionado

Mais de Eduardo Bohrer

Kubernetes - ThoughtWorks Tech Radar 18
Kubernetes - ThoughtWorks Tech Radar 18Kubernetes - ThoughtWorks Tech Radar 18
Kubernetes - ThoughtWorks Tech Radar 18Eduardo Bohrer
 
Refatoração - XPConfBR 2015
Refatoração - XPConfBR 2015 Refatoração - XPConfBR 2015
Refatoração - XPConfBR 2015 Eduardo Bohrer
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoEduardo Bohrer
 
Builds e Pipelines - A arte de automatizar a entrega de software!
Builds e Pipelines - A arte de automatizar a entrega de software!Builds e Pipelines - A arte de automatizar a entrega de software!
Builds e Pipelines - A arte de automatizar a entrega de software!Eduardo Bohrer
 
Git para quem gosta de git
Git para quem gosta de gitGit para quem gosta de git
Git para quem gosta de gitEduardo Bohrer
 
NoSQL and AWS Dynamodb
NoSQL and AWS DynamodbNoSQL and AWS Dynamodb
NoSQL and AWS DynamodbEduardo Bohrer
 
uMov.me API - Do básico ao avançado
uMov.me API - Do básico ao avançadouMov.me API - Do básico ao avançado
uMov.me API - Do básico ao avançadoEduardo Bohrer
 
XSS (Cross site scripting)
XSS (Cross site scripting)XSS (Cross site scripting)
XSS (Cross site scripting)Eduardo Bohrer
 
Chaos Report - Web Security Version
Chaos Report - Web Security VersionChaos Report - Web Security Version
Chaos Report - Web Security VersionEduardo Bohrer
 

Mais de Eduardo Bohrer (9)

Kubernetes - ThoughtWorks Tech Radar 18
Kubernetes - ThoughtWorks Tech Radar 18Kubernetes - ThoughtWorks Tech Radar 18
Kubernetes - ThoughtWorks Tech Radar 18
 
Refatoração - XPConfBR 2015
Refatoração - XPConfBR 2015 Refatoração - XPConfBR 2015
Refatoração - XPConfBR 2015
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançado
 
Builds e Pipelines - A arte de automatizar a entrega de software!
Builds e Pipelines - A arte de automatizar a entrega de software!Builds e Pipelines - A arte de automatizar a entrega de software!
Builds e Pipelines - A arte de automatizar a entrega de software!
 
Git para quem gosta de git
Git para quem gosta de gitGit para quem gosta de git
Git para quem gosta de git
 
NoSQL and AWS Dynamodb
NoSQL and AWS DynamodbNoSQL and AWS Dynamodb
NoSQL and AWS Dynamodb
 
uMov.me API - Do básico ao avançado
uMov.me API - Do básico ao avançadouMov.me API - Do básico ao avançado
uMov.me API - Do básico ao avançado
 
XSS (Cross site scripting)
XSS (Cross site scripting)XSS (Cross site scripting)
XSS (Cross site scripting)
 
Chaos Report - Web Security Version
Chaos Report - Web Security VersionChaos Report - Web Security Version
Chaos Report - Web Security Version
 

Memória e Garbage Collection na JVM