SlideShare uma empresa Scribd logo
1 de 23
Globalcode – Open4education
Por que eu deveria saber sobre garbage collection
como desenvolvedor Java?
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
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
Globalcode – Open4education
Componentes da JVM (HotSpot)
Class Loader
Runtime Data Areas
Execution Engine
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
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
Globalcode – Open4education
Fases do Garbage Collector
Mark
Sweep
Compact
Globalcode – Open4education
On the fly!
● “Stop the world event”
● Percorrer toda memória é ineficiente
● Compactar memória tem um custo alto
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
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
Globalcode – Open4education
Java Garbage Collectors
● Serial GC
● Parallel GC
● Concurrent Mark and Sweep (CMS GC)
● Garbage First Collector (G1CG)
● Z CG
Globalcode – Open4education
Serial GC
● Implementação mais simples
● Ambientes single-threaded
● Memória disponível < ~1.5G
● -XX:+UseSerialGC
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>
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
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
Globalcode – Open4education
G1 Garbage Collector
● Fase marcação global
● Prioriza as regiões com maior “lixo”
● -XX:+UseG1GC
● -XX:MaxGCPauseMillis=200
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
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
Globalcode – Open4education
Analisando o uso de memória
Globalcode – Open4education
Analisando o uso de memória
https://visualvm.github.io
Globalcode – Open4education
Analisando o uso de memória
https://visualvm.github.io
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
Obrigado!

Mais conteúdo relacionado

Semelhante a Java Virtual Threads.pptx

Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Introdução Java virtual machine
Introdução Java virtual machineIntrodução Java virtual machine
Introdução Java virtual machineBruno Coan
 
Overview de Grails: O Java em alta produtividade
Overview de Grails: O Java em alta produtividadeOverview de Grails: O Java em alta produtividade
Overview de Grails: O Java em alta produtividadeCleórbete Santos
 
Linux e zephyr conversando no mesmo SoC
Linux e zephyr conversando no mesmo SoCLinux e zephyr conversando no mesmo SoC
Linux e zephyr conversando no mesmo SoCEmbarcados
 
Desenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringDesenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringEder Magalhães
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?tdc-globalcode
 
Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLDiego Santos
 
Cross testing mobile com ruby, cucumber e appium
Cross testing mobile com ruby, cucumber e appiumCross testing mobile com ruby, cucumber e appium
Cross testing mobile com ruby, cucumber e appiumMaximiliano Alves
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em CDiego Santos
 
Automatize suas tarefas: conheça o GulpJS.
Automatize suas tarefas: conheça o GulpJS.Automatize suas tarefas: conheça o GulpJS.
Automatize suas tarefas: conheça o GulpJS.Yan Magalhães
 
Introdução ao NodeJS
Introdução ao NodeJSIntrodução ao NodeJS
Introdução ao NodeJSGiovanni Bassi
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...tdc-globalcode
 
Escalonador Earliest Deadline First - TDC2014SP
Escalonador Earliest Deadline First - TDC2014SPEscalonador Earliest Deadline First - TDC2014SP
Escalonador Earliest Deadline First - TDC2014SPRafael Moreira
 
Arquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineArquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineEder Magalhães
 
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux EmbarcadoTDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux Embarcadotdc-globalcode
 

Semelhante a Java Virtual Threads.pptx (20)

Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Treinamento Oracle GoldenGate 19c
Treinamento Oracle GoldenGate 19cTreinamento Oracle GoldenGate 19c
Treinamento Oracle GoldenGate 19c
 
Introdução Java virtual machine
Introdução Java virtual machineIntrodução Java virtual machine
Introdução Java virtual machine
 
Overview de Grails: O Java em alta produtividade
Overview de Grails: O Java em alta produtividadeOverview de Grails: O Java em alta produtividade
Overview de Grails: O Java em alta produtividade
 
Linux e zephyr conversando no mesmo SoC
Linux e zephyr conversando no mesmo SoCLinux e zephyr conversando no mesmo SoC
Linux e zephyr conversando no mesmo SoC
 
Desenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringDesenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e Spring
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?
 
Curso de Grails
Curso de GrailsCurso de Grails
Curso de Grails
 
Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQL
 
Replicação PostgreSQL com RepManager
Replicação PostgreSQL com RepManagerReplicação PostgreSQL com RepManager
Replicação PostgreSQL com RepManager
 
Cross testing mobile com ruby, cucumber e appium
Cross testing mobile com ruby, cucumber e appiumCross testing mobile com ruby, cucumber e appium
Cross testing mobile com ruby, cucumber e appium
 
Java em 2021
Java em 2021Java em 2021
Java em 2021
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em C
 
Automatize suas tarefas: conheça o GulpJS.
Automatize suas tarefas: conheça o GulpJS.Automatize suas tarefas: conheça o GulpJS.
Automatize suas tarefas: conheça o GulpJS.
 
Introdução ao NodeJS
Introdução ao NodeJSIntrodução ao NodeJS
Introdução ao NodeJS
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
 
Escalonador Earliest Deadline First - TDC2014SP
Escalonador Earliest Deadline First - TDC2014SPEscalonador Earliest Deadline First - TDC2014SP
Escalonador Earliest Deadline First - TDC2014SP
 
Arquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineArquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App Engine
 
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux EmbarcadoTDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux Embarcado
 
Bricklayer
BricklayerBricklayer
Bricklayer
 

Java Virtual Threads.pptx

  • 1. Globalcode – Open4education Por que eu deveria saber sobre garbage collection como desenvolvedor Java?
  • 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
  • 4. Globalcode – Open4education Componentes da JVM (HotSpot) Class Loader Runtime Data Areas Execution Engine
  • 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
  • 7. Globalcode – Open4education Fases do Garbage Collector Mark Sweep Compact
  • 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
  • 20. Globalcode – Open4education Analisando o uso de memória https://visualvm.github.io
  • 21. Globalcode – Open4education Analisando o uso de memória https://visualvm.github.io
  • 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