Recolector de basura predeterminado para Java 8

94

¿Cuál es el recolector de basura predeterminado para Java 8?

Cuando reviso los JMX Beans, revelan que es el colector paralelo para la nueva generación y el colector en serie antiguo para la generación anterior.

Code Junkie
fuente

Respuestas:

130

Recolectores de basura predeterminados:

  • Java 7 - GC paralelo
  • Java 8 - GC paralelo
  • Java 9 - G1 GC
  • Java 10 - G1 GC
x4444
fuente
Enlace a la fuente de información.
Eduard Wirch
80

Seleccionar el recolector de basura predeterminado (entre otras cosas) es lo que se llama el proceso ergonómico de la JVM. Este proceso depende de la clase de su máquina.

  • Para una máquina de clase servidor, definida como una máquina con 2 o más procesadores físicos y 2 o más GB de memoria física (independientemente de la plataforma), el recolector de basura predeterminado es el recolector paralelo. (también conocido como recolector de rendimiento).
  • Para la máquina de clase cliente, definida como una plataforma de 32 bits en Windows o una máquina de un solo procesador, el recolector de basura predeterminado es el recolector en serie.

Dado que prácticamente todas las máquinas tienen 2 o más CPU, la JVM prácticamente siempre considera una máquina de clase servidor. Es por eso que encontrará muchas referencias considerando que el recolector paralelo es el recolector de basura predeterminado.

Atún
fuente
55

Java tiene cuatro tipos de recolectores de basura (hasta la versión 10), pero después del lanzamiento estable de java 11, serían 5 tipos. Estos son:-

  1. Recolector de basura en serie S GC
  2. Recolector de basura paralelo P GC
  3. Recolector de basura CMS CMS GC
  4. Recolector de basura G1 G1 GC
  5. El recolector de basura Z ZGC

Implementaciones predeterminadas de GC en 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)

Más detalles sobre ZGC, visite

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

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

Nota: Si desea verificar qué GC está utilizando actualmente la JVM, puede utilizar el siguiente comando para mostrar el GC predeterminado: -

$ java -XX:+PrintCommandLineFlags -version 

Si desea configurar GC de acuerdo con sus necesidades, puede hacerlo siguiendo el comando. Aquí voy a configurar G1 GC como GC predeterminado.

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

ingrese la descripción de la imagen aquí

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
fuente
Sería útil mencionar la fuente del diagrama para más detalles
xagaffar
2
hola @xagaffar aquí está la URL de origen javapapers.com/java/types-of-java-garbage-collectors
Brajesh
3
@Brajesh No creo que ZGC sea el GC predeterminado de JDK 11. Abrir la wiki de JDK ( wiki.openjdk.java.net/display/zgc/Main ) dice "Use the -XX: + UnlockExperimentalVMOptions -XX: + UseZGC opciones para habilitar ZGC ". eso significa que no es el predeterminado.
Ashish Kumar
1
No, no es el predeterminado de JDK11. -XX: + UnlockExperimentalVMOptions -XX: + Use las opciones de ZGC para habilitar ZGC para desbloquear ZGC
vsingh
1
Los diagramas de flujo de la imagen son realmente útiles para explicar la diferencia entre recolectores de basura "en serie", "paralelos" y "concurrentes", pero se vuelve realmente absurdo con estos nueve cuadrados de colores para el recolector G1. ¿Qué se supone que significan? ¿Los hilos se vuelven cuadrados?
Holger