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.

Respostas:


128

Coletores de lixo padrão:

  • Java 7 - GC Paralelo
  • Java 8 - GC Paralelo
  • Java 9 - G1 GC
  • Java 10 - G1 GC

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.


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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.