2. Globalcode – Open4education
$whoami
Gustavo Lima
● Bacharel em Ciência da Computação @FUMEC
● Engenheiro de Software @Itaú
https://www.linkedin.com/in/gvlima/
https://github.com/gvlima
_gvlima
3. Globalcode – Open4education
Um passo além da sintaxe
● Java é uma Managed-Language
● Schedulers, Alocadores e GC (Ring 3 - User Level)
● Gerenciamento Automático de Memória
● Evita memory leaks e dangling pointers
● Uso eficiente de recursos
● Produtividade
5. Globalcode – Open4education
Garbage Collector
● Gerenciamento de Memória
● Primeira linguagem a utilizar GC - LISP
● Throughput (uso de CPU) e Latência (Pause)
● JVM (Mark and Sweep)
● O GC é uma parte importante do ciclo de vida do objeto
● Pode impactar em performance
6. Globalcode – Open4education
Ciclo de vida de um objeto
● Objetos da Heap são representados por um grafo
● Cada objeto é um nó / arestas são os relacionamentos
● Reachable / Unreachable
● GC Roots
● Percorre o grafo e marca os objetos (Mark)
● Deleta os objetos não utilizados (Sweep)
R
R
R
8. Globalcode – Open4education
On the fly!
● “Stop the world event”
● Percorrer toda memória é ineficiente
● Compactar memória tem um custo alto
9. Globalcode – Open4education
Na prática, a teoria é outra
● Análise empírica do tempo de vida dos objetos
● Muitos objetos permanecem pouco tempo
● Poucos objetos permanecem muito tempo
10. Globalcode – Open4education
Memória Heap
eden
survivor
space 0
survivor
space 1
tenured space metadata space
new Object();
Young Generation - Minor GC Old Generation - Major GC
promotion promotion promotion
JVM Heap Space
11. Globalcode – Open4education
Java Garbage Collectors
● Serial GC
● Parallel GC
● Concurrent Mark and Sweep (CMS GC)
● Garbage First Collector (G1CG)
● Z CG
12. Globalcode – Open4education
Serial GC
● Implementação mais simples
● Ambientes single-threaded
● Memória disponível < ~1.5G
● -XX:+UseSerialGC
13. Globalcode – Open4education
Parallel GC
● Utiliza múltiplas threads
● Ambientes multi-core
● Número de threads depende do hardware
● Default Java 8
● -XX:+UseParallelGC
● -XX:ParallelGCThreads=<N>
14. Globalcode – Open4education
Concurrent Mark Sweep GC
● Utiliza múltiplas threads
● Ambientes multi-core
● Número de threads depende do hardware
● Minimiza “Stop the world event” (Throughput)
● Descontinuado Java 9 / Removido Java 14
● XX:+UseConcMarkSweepGC
15. Globalcode – Open4education
G1 Garbage Collector
● Utiliza múltiplas threads
● É dividida em regiões de 1MB até 32MB
● Minimizar o tempo de pausa “Stop the world”
● Default Java 9
● Uso maior de CPU
16. Globalcode – Open4education
G1 Garbage Collector
● Fase marcação global
● Prioriza as regiões com maior “lixo”
● -XX:+UseG1GC
● -XX:MaxGCPauseMillis=200
17. Globalcode – Open4education
Z GC
● Abandona o conceito de geração
● Divida em regiões (ZPages)
● Baixa Latência (sub-milisegundos)
● Experimental Java 11
● Disponível Java 15
18. Globalcode – Open4education
Z GC
● Utiliza múltiplas threads
● Concorrente com threads da aplicação
● Curto “Stop the world” (GC Root)
● Trabalha em uma Zpage por vez
● -XX:+UseZGC
● -XX+UnlockExperimentalVMOptions
22. Globalcode – Open4education
● Precisa de pouca configuração
● Resizing automático custa CPU
● Use Flags (fine-tuning)
● Escrever códigos melhores
● -Xlog:gc
Analisando o uso de memória