Coletor de lixo padrão para Java 8

94

Qual é o coletor de lixo padrão para Java 8?

Quando eu verifico o JMX Beans, eles revelam que ele é o coletor paralelo para a nova geração e o coletor serial antigo para a geração anterior.

Code Junkie
fonte

Respostas:

128

Coletores de lixo padrão:

  • Java 7 - GC Paralelo
  • Java 8 - GC Paralelo
  • Java 9 - G1 GC
  • Java 10 - G1 GC
x4444
fonte
80

A seleção do coletor de lixo padrão (entre outras coisas) é o que chamamos de processo ergonômico da JVM. Este processo depende da classe de sua máquina.

  • Para máquina de classe de servidor, definida como uma máquina com 2 ou mais processadores físicos e 2 ou mais GB de memória física (independentemente da plataforma), o coletor de lixo padrão é o coletor paralelo (também conhecido como coletor de rendimento).
  • Para máquina de classe cliente, definida como uma plataforma de 32 bits no Windows ou uma máquina de processador único, o coletor de lixo padrão é o coletor serial.

Como praticamente todas as máquinas têm 2 ou mais CPUs, uma máquina é praticamente sempre considerada de classe de servidor pela JVM. É por isso que você encontrará muitas referências considerando o coletor paralelo como o coletor de lixo padrão.

Tunaki
fonte
55

Java tem quatro tipos de coletores de lixo (até a versão 10), mas após o lançamento estável do java 11, seriam 5 tipos. Esses são:-

  1. Serial Garbage Collector- S GC
  2. Coletor de lixo paralelo- P GC
  3. CMS Garbage Collector- CMS GC
  4. G1 Garbage Collector- G1 GC
  5. The Z Garbage Collector- ZGC

Implementações padrão de GC em java -

JVM GC

 Java 7 - P GC       
 Java 8 - P GC
 Java 9 - G1 GC
 Java 10- G1 GC
 Java 11- Z GC(I am not sure but it would be default GC of java 11)

Mais detalhes para ZGC, visite

http://openjdk.java.net/projects/zgc/

https://www.opsian.com/blog/javas-new-zgc-is-very-exciting/

Nota: Se você quiser verificar qual GC está sendo usado pelo JVM, você pode acessar o seguinte comando para mostrar o GC padrão: -

$ java -XX:+PrintCommandLineFlags -version 

Se você deseja definir o GC de acordo com sua necessidade, você pode fazer isso seguindo o comando. Aqui, vou definir G1 GC como GC padrão.

$ java -XX:+UseG1GC -XX:+PrintCommandLineFlags -version 

insira a descrição da imagem aqui

For more details , please visit 

https://javapapers.com/java/types-of-java-garbage-collectors/

https://alvinalexander.com/java/java-jvm-how-show-which-garbage-collector-running

Brajesh
fonte
Seria útil mencionar a fonte do diagrama para mais detalhes
xagaffar
2
oi @xagaffar, aqui está o url de origem javapapers.com/java/types-of-java-garbage-collectors
Brajesh
2
@Brajesh Eu não acho que ZGC é o GC padrão do JDK 11. Abra o wiki JDK ( wiki.openjdk.java.net/display/zgc/Main ) afirma "Use o -XX: + UnlockExperimentalVMOptions -XX: + Use as opções do ZGC para ativar ZGC. " isso significa que não é o padrão.
Ashish Kumar de
1
Não, não é o padrão do JDK11. -XX: + UnlockExperimentalVMOptions -XX: + Use as opções do ZGC para permitir que o ZGC desbloqueie o ZGC
vsingh
1
Os fluxogramas da imagem são realmente úteis para explicar a diferença entre coletores de lixo "seriais", "paralelos" e "concorrentes", mas fica realmente sem sentido com esses nove quadrados coloridos para o coletor G1. O que eles querem dizer? Os tópicos viram quadrados?
Holger