Garbage collector predefinito per Java 8


94

Qual è il garbage collector predefinito per Java 8?

Quando controllo i fagioli JMX, rivelano che è il raccoglitore parallelo per la nuova generazione e il vecchio raccoglitore seriale per la vecchia generazione.

Risposte:


128

Garbage collector predefiniti:

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

80

La selezione del garbage collector predefinito (tra le altre cose) è quello che viene chiamato il processo di ergonomia della JVM. Questo processo dipende dalla classe della tua macchina.

  • Per la macchina di classe server, definita come una macchina con 2 o più processori fisici e 2 o più GB di memoria fisica (indipendentemente dalla piattaforma), il garbage collector predefinito è il parallel collector (noto anche come throughput collector).
  • Per la macchina di classe client, definita come una piattaforma a 32 bit su Windows o una macchina a processore singolo, il garbage collector predefinito è il serial collector.

Poiché praticamente tutte le macchine hanno 2 o più CPU, una macchina è praticamente sempre considerata di classe server dalla JVM. Ecco perché troverai molti riferimenti che considerano il collector parallelo come garbage collector predefinito.


55

Java ha quattro tipi di garbage collector (fino alla versione 10), ma dopo il rilascio stabile di java 11, sarebbero 5 tipi. Questi sono:-

  1. Garbage Collector seriale S GC
  2. Garbage Collector parallelo P GC
  3. Garbage Collector CMS CMS GC
  4. Garbage Collector G1 G1 GC
  5. The Z Garbage Collector- ZGC

Implementazioni predefinite di GC in 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)

Maggiori dettagli per ZGC, visitare

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

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

Nota: se si desidera verificare quale GC è attualmente utilizzato da JVM, è possibile utilizzare il seguente comando per mostrare il GC predefinito: -

$ java -XX:+PrintCommandLineFlags -version 

Se desideri impostare il GC in base alle tue necessità, puoi farlo seguendo il comando. Qui imposterò G1 GC come GC predefinito.

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

inserisci qui la descrizione dell'immagine

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


Sarebbe utile citare la fonte del diagramma per ulteriori dettagli
xagaffar

2
ciao @xagaffar ecco l'url della fonte javapapers.com/java/types-of-java-garbage-collectors
Brajesh

2
@Brajesh Non penso che ZGC sia il GC predefinito di JDK 11. Apri wiki JDK ( wiki.openjdk.java.net/display/zgc/Main ) afferma "Usa le opzioni -XX: + UnlockExperimentalVMOptions -XX: + UsaZGC per abilitare ZGC. " ciò significa che non è l'impostazione predefinita.
Ashish Kumar

1
No, non è l'impostazione predefinita di JDK11. -XX: + UnlockExperimentalVMOptions -XX: + Usa le opzioni ZGC per abilitare ZGC per sbloccare ZGC
vsingh

1
I diagrammi di flusso dell'immagine sono davvero utili per spiegare la differenza tra i garbage collector "seriali", "paralleli" e "concorrenti", ma diventa davvero assurdo con questi nove quadrati colorati per il collector G1. Cosa dovrebbero significare? I fili diventano quadrati?
Holger
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.