java garbage collectors - hotspot
DESCRIPTION
Garbage collectors, seu funcionamento, do Serial GC ao G1TRANSCRIPT
![Page 1: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/1.jpg)
JVMGarbage Collectors
![Page 2: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/2.jpg)
About Me
Fabiano V. Santos@gmcoringa
Engenheiro de Software na Elo7
Time de buscas: Greyjoy
![Page 3: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/3.jpg)
HotSpot VM Geracional
• Modelo geracional, aka “hipótese geracional fraca”• Objetos mais alocados tem um curto peíodo de vida• Poucas referências de objetos velhos para novos existem
Youg Generation• Onde são alocados novos objetos;• Coletas frequentes;• Coletas pequenas;
Old Generation• Objetos de longa duração• Poucas coletas• Crescimento lento
![Page 4: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/4.jpg)
Card Table• Usada para identificar objetos em uso na young generation sem a
necessidade de verificar a old generation
• Objetos que possuem referência a old generation são marcados como “sujos”
• Durante “minor collection” objetos sujos são verficados para descobrir pontenciais referencias da old generation para young generation
![Page 5: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/5.jpg)
Collection Roots
Alguns objetos especiais são sempre alcançaveis, e estes formam o que é chamado de “Garbage Collection Roots”.
Existem quatro tipos de GC Roots:• Variáveis locais• Java threads ativas• Variáveis estaticas• Referências JNI
Objetos não alcançáveisLixo
Objetos alcançáveis
Objetos não alcançáveisLixo
GC Roots
![Page 6: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/6.jpg)
Young Generation
• Dividida em três areas:• Eden: onde novos objetos são alocados• Duas Survivors: objetos que sobreviveram a pelo
menos uma coleta.
Young GenerationEden
Sem Uso
From survivor To survivor
Old Generation
Antes do Minor GC
Vazio
Young Generation
Sem Uso
To survivor From survivor
Old Generation
Depois do Minor GC
Eden
![Page 7: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/7.jpg)
Alocação de Memória
• Bump the pointer• Objetos são alocados no topo• Young generation usa “copying garbage collector”, o que sempre deixa a Eden
vazia
• TLABs (Thread-Local Allocation Buffers)• Cada thread possui um buffer, que é um pedaço da Eden• Requisições a novos TLABs não são frequentes• Garante alocação rápida de objetos• Multithreaded
• Survivor Full• Objetos que causem overflow são alocados na old generation (“premature
promotion”)• Se durante o overflow a old generation ficar cheia, um Full GC é executado, aka:
“promotion failure”
![Page 8: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/8.jpg)
Serial GC
• Coletas na young e old através de “stop-the-world”
• Usa apenas um processador virtual
Old Generation GC
Free
Antes da Compactação Após a Compactação
Usos
• Eficiente para aplicação com menos de 100 MB Java Heap
• Ambientes com alto numero de JVMs
![Page 9: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/9.jpg)
Throughput Collectors
Parallel GC• Funciona de forma semelhante ao Serial GC, porém multi-thread
• Somente Young Generation
Parallel Old GC• Multi-thread Old Generation
• Automaticamente habilita Parallel GC
Usos• Aplicações que necessitem de alto throughput
• Multiplos processadores
• Exemplos: processamento batch, queues
![Page 10: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/10.jpg)
Concurrent Mark-Sweep (CMS)
Young Generation
• Semelhante ao Parallel GC
Old Generation
• Roda de forma concorrente, com o objetivo de manter espaço livre suficiente
• Possui apenas duas pequenas pausas (Initial Mark e Remark)
• Menor throughput
• Coletas concorrentes
• Faz uso de free lists para alocação de objetos na old generation
• Coleta se inicia quando ocupação alcança um certo threashold (CMSInitiatingOccupancyFraction)
![Page 11: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/11.jpg)
CMS: funcionamento
• Initial Mark: possui uma pequena pausa e marca objetos alcançaveis fora da old generation (GC Roots)
• Concurrent mark: marca todos os objetos “vivos”. Não há garantias de que todos os objetos “vivos” serão marcados.
• Pre-cleaning: verifica objetos que foram modificados durante as fases anteriores.
• Remark: possui uma pequena pausa, verifica objetos modificados e garante que todos os objetos vivos foram marcados.
• Concurrent sweep: varredura, remove objetos não mais utilizados.
![Page 12: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/12.jpg)
CMS: Prós e contras
● Redução de throuput
● Requer maior heap
● Maior consumo de CPU
● Fragmentação
● Tempo de resposta rápida, ex: applicações web
● Reduz ou anula Full GCs
● Menor latência
![Page 13: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/13.jpg)
Garbage First GC (aka G1)
• Substituo de longo prazo do CMS
• Paralelo
• Concorrente
• Compactação incremental
• Usa layout diferente na heap
E O O L O E L
L
O
L E S S O
L O O L O
O S E E L O
S L O L O L
H
H
Eden
S
O
L
H
E
Survivor
Old Generation
Sem Uso
Humongous
![Page 14: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/14.jpg)
G1 Minor Collection
E O O L O E L
L
O
L E S S O
L O O L O
O S E E L O
S L O L O L
H
H
Antes do minor GC Depois do minor GC
E O O
L
O
O
L E
S
O
O O L O
O E E L O
L O L O
H
H
L
SL
S
SL
S
L
![Page 15: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/15.jpg)
G1: Funcionamento
• Coleta concorrente iniciada após ocupação alcançar um certo threshold (Mixed Collection, equivalente a coleta da old generation)
• Coleta em areas com menor ocupação, ou seja, menor número de objetos “vivos”
• Até 8 Mixed Collections, iniciado após uma coleta concorrente
• Estruturas de dados G1
• RSet (Remembered Set): objetos vivos em uma região
• CSet (Collection Set): regiões que serão coletados
• Possui como objetivo pausas de 200ms (default)
• 2k Regiões, tamanhos variam de 1MB a 32MB
![Page 16: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/16.jpg)
G1: Fases
• Minor GC: possui uma pequena pausa, coleta na eden e survivor
• Coleta Concorrente
• Initial Mark: possui uma pequena pausa, marca todos os objetos alcançaveis (GC Roots) e é concorrente com o minor GC
• Root Region Scanning: procura nas regiões “Survirvor” por referencias a objetos na old generation
• Concurrent Marking: marca todos os objetos vivos (young e old)
• Remark: possui uma pequena pausa,verifica objetos que foram modificados durante as fases anteriores.
• Cleanup: possui uma pequena pausa, identifica regiões livres e limpa Rset.
• Concurrent Cleanup: Reset, limpa e devolve regiões livres para a lista de regiões sem uso. Single threaded.
![Page 17: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/17.jpg)
GC Comparativo
Serial GC Parallel GC CMS GC G1 GC
Young GCs SerialMulti-
threadedMulti-
threadedMulti-
threaded
Old GCs SerialMulti-
threaded
Multi-threaded e
Concorrente
Multi-threaded e
Concorrente
![Page 18: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/18.jpg)
GC Log
-XX:+PrintGCDetails (-verbose:gc -XX:+PrintGC)
-XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps
-Xloggc:gc.log
![Page 19: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/19.jpg)
Ferramentas
• https://github.com/Netflix/gcviz
• https://github.com/chewiebug/GCViewer
• https://h20392.www2.hp.com/portal/swdepot/displayProductInfo.do?productNumber=HPJMETER
• http://www.ibm.com/developerworks/java/jdk/tools/gcmv/
• https://java.net/projects/gchisto
![Page 20: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/20.jpg)
PermGen & Metaspace
• PermGen Java 1.7 ou anterior
• Area para guardar meta-informações de classes
• Java 8 movido para Metaspace
• Coletas se iniciam quando alcançado um certo valor de alocação (MetaspaceSize)
• Off heap
• Out of memory ainda podem acontecer"java.lang.OutOfMemoryError: Metadata space"
![Page 21: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/21.jpg)
História dos GC
• Serial GC foi incluído no Java 1.3, juntamente com outro garbage colector chamado Train GC
• Parallel GC e CMS incluídos no Java 1.4.2
• Parallel Old GC incluído no Java 5 Update 6, juntamente com melhorias no CMS (Concurrent Marking e Sweeping)
• Train GC removido no Java 6
• G1 GC incluído no Java 6 Update 20
![Page 22: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/22.jpg)
Bibliografia
• Charlie Hunt, Binu John. Java Performance, Addison-Wesley, 2013.
• Charlie Hunt, Monica Beckwith. Qcon New York, 2013.http://www.infoq.com/presentations/java-g1
• Monica Beckwith. Garbage First Collector Tunning Article, 2013.http://www.oracle.com/technetwork/articles/java/g1gc-1984535.html
• David Detlefs, Christine Flood, Steve Heller, Tony Printezis. G1 original paper, 2004.http://dl.acm.org/citation.cfm?id=1029879
• Sun Microsystems. Memory Manager White paper, 2006.http://www.oracle.com/technetwork/java/javase/memorymanagement-whitepaper-150215.pdf
![Page 23: Java Garbage Collectors - HotSpot](https://reader031.vdocuments.mx/reader031/viewer/2022012306/558a24f6d8b42a10248b467a/html5/thumbnails/23.jpg)
Perguntas ?