Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TDC - Java Garbage Collection

TDC - Java Garbage Collection

Avatar for Gustavo Lima

Gustavo Lima

March 24, 2023
Tweet

More Decks by Gustavo Lima

Other Decks in Programming

Transcript

  1. 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
  2. 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
  3. 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
  4. 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
  5. Globalcode – Open4education On the fly! • “Stop the world

    event” • Percorrer toda memória é ineficiente • Compactar memória tem um custo alto
  6. 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
  7. 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
  8. Globalcode – Open4education Java Garbage Collectors • Serial GC •

    Parallel GC • Concurrent Mark and Sweep (CMS GC) • Garbage First Collector (G1CG) • Z CG
  9. Globalcode – Open4education Serial GC • Implementação mais simples •

    Ambientes single-threaded • Memória disponível < ~1.5G • -XX:+UseSerialGC
  10. 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>
  11. 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
  12. 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
  13. Globalcode – Open4education G1 Garbage Collector • Fase marcação global

    • Prioriza as regiões com maior “lixo” • -XX:+UseG1GC • -XX:MaxGCPauseMillis=200
  14. 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
  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
  16. 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