Java 8 için varsayılan çöp toplayıcı


95

Java 8 için varsayılan çöp toplayıcı nedir?

JMX Beans'e baktığımda yeni nesil için paralel toplayıcı, eski nesil için eski seri toplayıcı olduğunu ortaya koyuyorlar.

Yanıtlar:


131

Varsayılan çöp toplayıcıları:

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

1
Lütfen bilgi kaynağına bağlantı verin.
Eduard Wirch


81

Varsayılan çöp toplayıcının seçilmesi (diğer şeylerin yanı sıra) JVM'nin ergonomi süreci olarak adlandırılan şeydir . Bu süreç, makinenizin sınıfına bağlıdır.

  • 2 veya daha fazla fiziksel işlemciye ve 2 veya daha fazla GB fiziksel belleğe sahip bir makine olarak tanımlanan sunucu sınıfı makine için (platformdan bağımsız olarak), varsayılan çöp toplayıcı paralel toplayıcıdır (ayrıca işlem hacmi toplayıcı olarak da bilinir).
  • Windows'ta 32 bitlik bir platform veya tek işlemcili bir makine olarak tanımlanan istemci sınıfı makine için varsayılan çöp toplayıcı, seri toplayıcıdır.

Pratik olarak tüm makinelerde 2 veya daha fazla CPU olduğundan, bir makine JVM tarafından neredeyse her zaman sunucu sınıfı olarak kabul edilir. Bu nedenle, paralel toplayıcıyı varsayılan çöp toplayıcı olarak düşünen birçok referans bulacaksınız.


59

Java'nın dört tür çöp toplayıcısı vardır (sürüm 10'a kadar), ancak java 11'in kararlı sürümünden sonra bu 5 tür olacaktır. Bunlar:-

  1. Seri Çöp Toplayıcı S GC
  2. Paralel Çöp Toplayıcı- P GC
  3. CMS Çöp Toplayıcı CMS GC
  4. G1 Çöp Toplayıcı- G1 GC
  5. Z Çöp Toplayıcı- ZGC

Java'da varsayılan GC uygulamaları -

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)

ZGC için daha fazla ayrıntı, lütfen ziyaret edin

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

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

Not: Şu anda JVM tarafından hangi GC'nin kullanıldığını doğrulamak istiyorsanız, varsayılan GC'yi göstermek için aşağıdaki komuta gidebilirsiniz: -

$ java -XX:+PrintCommandLineFlags -version 

GC'yi ihtiyacınıza göre ayarlamak istiyorsanız, bunu aşağıdaki komutu takip ederek yapabilirsiniz. Burada G1 GC'yi varsayılan GC olarak ayarlayacağım.

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

görüntü açıklamasını buraya girin

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


Daha fazla detay için diyagram kaynağını belirtmeyi yararlı olur
xagaffar

2
merhaba @xagaffar burada kaynak url javapapers.com/java/types-of-java-garbage-collectors
Brajesh

3
@Brajesh ZGC'nin JDK 11'in varsayılan GC'si olduğunu düşünmüyorum. Açık JDK wiki ( wiki.openjdk.java.net/display/zgc/Main ) "-XX: + UnlockExperimentalVMOptions -XX: + Kullanın ZGC seçeneklerini etkinleştirin ZGC. " bu, varsayılan olmadığı anlamına gelir.
Ashish Kumar

1
Hayır, JDK11'in varsayılanı değildir. -XX: + UnlockExperimentalVMOptions -XX: + ZGC'nin ZGC'nin kilidini açmasını sağlamak için ZGC seçeneklerini kullanın
vsingh

1
Resmin akış diyagramları "seri", "paralel" ve "eşzamanlı" çöp toplayıcılar arasındaki farkı açıklamak için gerçekten kullanışlıdır, ancak G1 toplayıcı için bu dokuz renkli kareyle gerçekten anlamsızlaşıyor. Ne anlama gelmeleri gerekiyor? İplikler kare mi olur?
Holger

-1

Java 9'dan Java 15'e kadar G1GC, Java 15'te bile varsayılandır ve Oracle'ın geliştirdiği ZGC'yi ve her ikisi de Java 15 Eylül 2020'de üretime hazır olan Shenandoah olan iki yeni nesil Çöp toplayıcıyı ekler.


1. Shenandoah yalnızca OpenJDK için geçerlidir, Oracle'da yoktur. 2. ZGC, JDK 8 için varsayılan GC değildir, ne de 11, hala kullanılması gerekir UnlockExperimentalVMOptions, ancak artık jdk 15'te değildir. 3. ParallelGC, JDK 8 için varsayılan GC'dir, aslında buradaki soru budur.
Francisco Melo junior

Java 9'dan Java 15'e kadar G1GC'nin hala varsayılan olduğunu belirtiyorum ... yakın zamanda 2 yeni GC eklendiğinde bile ..
chiperortiz

Hayır Since Java 8 until Java 15 the G1GC is the default even on Java 15. İfadenin yanlış olduğunu söyledin . JDK 8 varsayılanı Paraleldir, cevabı hala yanlış olarak yorumlamak için kendiniz söylediniz. Shenandoah, JDK 8 ve JDK 11'de kullanılabilir, geri taşınmıştır.
Francisco Melo junior

Evet özür dilerim gerçekten Java 9'dan
bahsediyorum
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.