Share
Embed
Transcript
61 slides
-
Summary • O que é o Garbage Collector? • Como
funciona o GC? • Existe mais de um GC? • JVM Ergonomics • Boas práticas -
Existem quantos GC? Existe mais de um GC? A) 2
B) 3 C) 4 D) 5 E) > 5 -
O que é o Garbage Collector? O que é o
Garbage Collector? 01 -
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? -
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? -
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? -
Latency O que é o Garbage Collector? A latência é
uma medida de quanto tempo uma única tarefa leva. -
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. -
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) -
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 -
Existem quantos GC? Existe mais de um GC? A) 2
B) 3 C) 4 D) 5 E) > 5 -
Existem quantos GC? Existe mais de um GC? A) 2
B) 3 C) 4 D) 5 E) > 5 -
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; -
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; -
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 -
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; -
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. -
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; -
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. -
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; -
Qual GC a JVM vai escolher? JVM Ergonomics A) Serial
B) G1 C) Depende D) ZGC E) Parallel -
Qual GC a JVM vai escolher? JVM Ergonomics A) Serial
B) G1 C) Depende D) ZGC E) Parallel -
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. -
Qual GC a JVM vai escolher? JVM Ergonomics Se tiver
até 1791 MB é considerado como um client machine, e será utilizado o SerialGC. -
Quanto de memória devo usar? Boas práticas Aloque 75% da
memória da heap para JVM. -XX:MaxRAMPercentage=75 -
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. -
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 -
• O que é o Garbage Collector? • Como funciona
o GC? • Existe mais de um GC? • JVM Ergonomics • Boas práticas Recapitulando -
• 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