Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

Java - Garbage Collector Thiago Bomfim Não use o default

Slide 3

Slide 3 text

Summary ● O que é o Garbage Collector? ● Como funciona o GC? ● Existe mais de um GC? ● JVM Ergonomics ● Boas práticas

Slide 4

Slide 4 text

Existem quantos GC? Existe mais de um GC? A) 2 B) 3 C) 4 D) 5 E) > 5

Slide 5

Slide 5 text

O que é o Garbage Collector? O que é o Garbage Collector? 01

Slide 6

Slide 6 text

Memory Leak são assassinos silenciosos, devorando lentamente os recursos do sistema, até que um dia toda a aplicação é condenada. Memory Leak O que é o Garbage Collector?

Slide 7

Slide 7 text

Memory Leak são assassinos silenciosos, devorando lentamente os recursos do sistema, até que um dia toda a aplicação é condenada. Memory Leak O que é o Garbage Collector?

Slide 8

Slide 8 text

O Garbage Collector é um guardião silencioso da gestão de memória, percorrendo incansavelmente o reino da memória alocada, liberando os fragmentos esquecidos e poupando os desenvolvedores da necessidade da desalocação manual de memória. Garbage Collector O que é o Garbage Collector?

Slide 9

Slide 9 text

O que é o Garbage Collector?

Slide 10

Slide 10 text

Como funciona o GC? Como funciona o GC? 02

Slide 11

Slide 11 text

Estrutura da HEAP Como funciona o GC?

Slide 12

Slide 12 text

Alocação de Objetos O que é o Garbage Collector?

Slide 13

Slide 13 text

Eden Space O que é o Garbage Collector?

Slide 14

Slide 14 text

Survivor Space O que é o Garbage Collector?

Slide 15

Slide 15 text

Envelhecendo os objetos O que é o Garbage Collector?

Slide 16

Slide 16 text

Envelhecimento adicional O que é o Garbage Collector?

Slide 17

Slide 17 text

Aposentadoria O que é o Garbage Collector?

Slide 18

Slide 18 text

Aposentadoria O que é o Garbage Collector?

Slide 19

Slide 19 text

Old generation é limpa? O que é o Garbage Collector?

Slide 20

Slide 20 text

Stop the World (STW) O que é o Garbage Collector?

Slide 21

Slide 21 text

Latency O que é o Garbage Collector? A latência é uma medida de quanto tempo uma única tarefa leva.

Slide 22

Slide 22 text

Throughput O que é o Garbage Collector? A taxa de transferência é uma medida de quantas tarefas um aplicativo pode manipular simultaneamente durante um período de tempo.

Slide 23

Slide 23 text

Latency vs Throughput O que é o Garbage Collector? https://approvedmodems.org/latency-vs-throughput/

Slide 24

Slide 24 text

Latency vs Throughput O que é o Garbage Collector? https://www.comparitech.com/net-admin/latency-vs-throughput/

Slide 25

Slide 25 text

Old generation é limpa? O que é o Garbage Collector?

Slide 26

Slide 26 text

Old Generation CMS O que é o Garbage Collector?

Slide 27

Slide 27 text

G1 Heap Allocation O que é o Garbage Collector?

Slide 28

Slide 28 text

Old Generation G1 O que é o Garbage Collector?

Slide 29

Slide 29 text

Old Generation G1 O que é o Garbage Collector? ● Initial Mark Phase ○ Essa é a primeira fase, na qual o coletor identifica os objetos “vivos” e os marca como objetos ativos, isso é crucial para ser utilizado nas outras etapas. ○ Essa fase é STW(Stop the world) ● Concurrent Marking Phase ○ Determina todos os objetos atualmente alcançáveis (vivos) nas regiões da old generation a serem mantidos para a seguinte fase, remark phase. ● Remark Phase ○ Nessa fase é realizado a identificação quaisquer alterações nos objetos “vivos” que ocorreram na fase anterior. Isso é essencial para a eficácia do G1GC, para isso é feito com STW. ○ Usa o algoritmo Snapshot-at-the-Beginning (SATB), que é muito mais rápido do que o usado com o CMS. ● Copying/Cleanup Phase ○ Atualiza a informação de objetos vivos e regiões totalmente livres, isso é crucial para próximas coletas. (STW) ○ Limpa as regiões, libera o espaço. (Concurrent)

Slide 30

Slide 30 text

Permanent Generation? O que é o Garbage Collector?

Slide 31

Slide 31 text

Permanent Generation/Metaspace O que é o Garbage Collector? ● A permanent Generation é destinada para metadados que representam as classes, métodos… ● Desde o Java 8, o nome PermGen foi substituido por Metaspace; -XX:+MaxMetaspaceSize=100m ● Os metadados de classe são desalocados quando a classe Java correspondente é descarregada. ● Unload classes GC

Slide 32

Slide 32 text

Existe mais de um GC? Existe mais de um GC? 03

Slide 33

Slide 33 text

Existem quantos GC? Existe mais de um GC? A) 2 B) 3 C) 4 D) 5 E) > 5

Slide 34

Slide 34 text

Existem quantos GC? Existe mais de um GC? A) 2 B) 3 C) 4 D) 5 E) > 5

Slide 35

Slide 35 text

Serial GC Existe mais de um GC? ● Serial GC utiliza uma única thread para executar o GC; ● Recomendado para máquinas com 1 CPU; ● Recomendado para máquinas com até 100MB; -XX:+UseSerialGC ● Recomendado para aplicações client-class machine;

Slide 36

Slide 36 text

Parallel GC Existe mais de um GC? ● Parallel GC utiliza uma multi thread para executar o GC; ● Recomendado para aplicações com médio e grande tamanho; ● Default GC para versões < 9; -XX:+UseParallelGC ● Recomendado para aplicações que tem foco em throughput;

Slide 37

Slide 37 text

Concurrent Mark Sweep GC (CMS) Existe mais de um GC? ● Deprecated in Java 9 JEP 291 ● Removed in Java 14 JEP 363 ● Foi substituido pelo G1

Slide 38

Slide 38 text

Garbage-First (G1) GC Existe mais de um GC? ● G1 GC utiliza também multi thread para executar o GC; ● Default GC para versões >= 9 JEP 248; ● Limitar os pause times do GC é, em geral, mais importante do que maximizar o Throughput; ● Evita execução do Full GC também é uma das principais melhorias em comparação ao Parallel GC JEP 156; ● Recomendado para aplicações que buscam balancear a latência e o throughput;

Slide 39

Slide 39 text

Garbage-First (G1) GC Existe mais de um GC? ● O G1 é um server-style GC adequado para máquinas com vários processadores com grandes memórias; -XX:+UseG1GC ● Prove um equilibrio entre throughput e latency. ● Busca minimizar as chances de memory fragmentation. Para isso ele realiza um processo de compactação, além de possuir um espaço para objetos enormes.

Slide 40

Slide 40 text

Espsilon GC Existe mais de um GC? ● No-Op GC; -XX:+UseEpsilonGC -XX:+UnlockExperimentalVMOptions ● Não tem latência, pq não há execução do GC, em compensação a um consumo constante de memoria; ● GC lida com a alocação de memória, mas não implementa nenhum mecanismo para limpar a memoria; ● Utilização para benchmark, lambdas, aplicações de curta duração. ● Introduzido no Java 11 como Experimental, JEP 318;

Slide 41

Slide 41 text

Shenandoah Existe mais de um GC? ● Tem como propósito diminuir a latência, com menores pause times, garantindo um pause time similiar independente do tamanho da Heap. Entretanto, isso afeta o throughput; -XX:+UseShenandoahGC ● Disponível para versões >= 15 JEP 379; ● Ideal para aplicações que buscam um pequeno pause time de forma consistente, seja para 200MB ou 200GB.

Slide 42

Slide 42 text

ZGC Existe mais de um GC? ● ZGC é um GC projetado para baixa latência e alta escalabilidade. ● Disponível para versões >= 15 JEP 377; ● Um dos objetivos do ZGC é ter pause times menores que 1ms. -XX:+UseZGC ● Suportar aplicações pequenas (MBs) até aplicações muito grandes (TBs). ● Não separa a heap em old e young generation;

Slide 43

Slide 43 text

Existe mais de um GC?

Slide 44

Slide 44 text

JVM Ergonomics JVM Ergonomics 04

Slide 45

Slide 45 text

Qual GC a JVM vai escolher? JVM Ergonomics A) Serial B) G1 C) Depende D) ZGC E) Parallel

Slide 46

Slide 46 text

Qual GC a JVM vai escolher? JVM Ergonomics A) Serial B) G1 C) Depende D) ZGC E) Parallel

Slide 47

Slide 47 text

Qual GC a JVM vai escolher? JVM Ergonomics https://github.com/openjdk/jdk/blob/230bcb769a2701b80b4a12a39785f88a1db48ba9/src/hotspot/share/runtime/os.cpp#L1710

Slide 48

Slide 48 text

Qual GC a JVM vai escolher? JVM Ergonomics Se tiver 2+ processors e > 1792 MB é considerado como um server machine, e será utilizado o G1GC.

Slide 49

Slide 49 text

Qual GC a JVM vai escolher? JVM Ergonomics Se tiver até 1791 MB é considerado como um client machine, e será utilizado o SerialGC.

Slide 50

Slide 50 text

O calculo é com base na HEAP JVM Ergonomics

Slide 51

Slide 51 text

Boas práticas Boas práticas 05

Slide 52

Slide 52 text

JVM parâmetros Boas práticas

Slide 53

Slide 53 text

Quanto de memória devo usar? Boas práticas Aloque 75% da memória da heap para JVM. -XX:MaxRAMPercentage=75

Slide 54

Slide 54 text

Qual GC eu devo utilizar? Boas práticas ● Se sua aplicação for client-side, utilize o SerialGC ● Se sua aplicação for server-side, utilize o default G1GC e verifique as necessidades. ● Se o foco for em throughput, não tiver problemas com latência, utilize o parallelGC. ● Se quiser um equilíbrio entre throughput e latência, utilize o G1GC. ● Se o seu foco for em minimizar latência, e estiver com Java >= 17, pode tentar o ZGC.

Slide 55

Slide 55 text

Qual GC eu devo utilizar? Boas práticas https://learn.microsoft.com/en-us/azure/developer/java/containers/overview

Slide 56

Slide 56 text

Garbage-First (G1) GC - Tuning Boas práticas ● XX:MaxGCPauseMillis=200 ● -XX:G1HeapWastePercent=5 - G1 interrompe a fase de recuperação de espaço se o espaço livre para coleta for menor do essa definição ● Evite definir explicitamente o tamanho da young generation com o -Xmn ou -XX:NewRatio ● Se você quiser definir o tamanho da young generation use -XX:G1MaxNewSizePercent=60 or -XX:G1NewSizePercent=5

Slide 57

Slide 57 text

Recapitulando Recapitulando

Slide 58

Slide 58 text

● O que é o Garbage Collector? ● Como funciona o GC? ● Existe mais de um GC? ● JVM Ergonomics ● Boas práticas Recapitulando

Slide 59

Slide 59 text

● GC - https://docs.oracle.com/en/java/javase/20/gctuning/introduction-garbage-collection-tuning.html ● G1 Tuning - https://www.oracle.com/technical-resources/articles/java/g1gc.html ● G1 Step-By-Step - https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html ● Ergonomics JVM - https://learn.microsoft.com/en-us/azure/developer/java/containers/overview ● GC progress from JDK 8 to JDK 17 - https://kstefanj.github.io/2021/11/24/gc-progress-8-17.html ● Java garbage collection: The 10-release evolution from JDK 8 to JDK 18 - https://blogs.oracle.com/javamagazine/post/java-garbage-collectors-evolution ● Experimental Garbage Collectors in the JVM - https://www.baeldung.com/jvm-experimental-garbage-collectors ● JVM Garbage Collection Basics - https://medium.com/javarevisited/jvm-garbage-collection-basics-edce6791ae98 Recapitulando

Slide 60

Slide 60 text

https://www.linkedin.com/in/thiagobfim/ https://github.com/ThiagoBfim Referências

Slide 61

Slide 61 text

No content