ตัวรวบรวมขยะดีฟอลต์สำหรับ Java 8


95

ตัวรวบรวมขยะเริ่มต้นสำหรับ Java 8 คืออะไร?

เมื่อฉันตรวจสอบ JMX Beans พวกเขาเปิดเผยว่าเป็นตัวสะสมคู่ขนานสำหรับคนรุ่นใหม่และตัวเก็บอนุกรมรุ่นเก่าสำหรับคนรุ่นเก่า

คำตอบ:



81

การเลือกตัวเก็บขยะเริ่มต้น (เหนือสิ่งอื่นใด) คือสิ่งที่เรียกว่ากระบวนการยศาสตร์ของ JVM กระบวนการนี้ขึ้นอยู่กับคลาสของเครื่องของคุณ

  • สำหรับเครื่องระดับเซิร์ฟเวอร์กำหนดให้เป็นเครื่องที่มีตัวประมวลผลจริง 2 ตัวขึ้นไปและหน่วยความจำฟิสิคัล 2 GB ขึ้นไป (โดยไม่คำนึงถึงแพลตฟอร์ม) ตัวรวบรวมขยะดีฟอลต์คือตัวรวบรวมแบบขนาน (หรือที่เรียกว่าตัวรวบรวมปริมาณงาน)
  • สำหรับเครื่องระดับไคลเอนต์ซึ่งกำหนดเป็นแพลตฟอร์ม 32 บิตบน Windows หรือเครื่องที่มีโปรเซสเซอร์เดียวตัวรวบรวมขยะดีฟอลต์คือตัวรวบรวมอนุกรม

เนื่องจากเครื่องทั้งหมดมี CPU ตั้งแต่ 2 เครื่องขึ้นไป JVM จะถือว่าเครื่องเป็นระดับเซิร์ฟเวอร์เสมอ นั่นเป็นเหตุผลที่คุณจะพบข้อมูลอ้างอิงจำนวนมากโดยพิจารณาว่าตัวรวบรวมแบบขนานเป็นตัวเก็บขยะเริ่มต้น


59

Java มีตัวรวบรวมขยะสี่ประเภท (สูงสุดเวอร์ชัน 10) แต่หลังจากปล่อย java 11 อย่างเสถียรแล้วจะมี 5 ประเภท เหล่านี้คือ: -

  1. เครื่องเก็บขยะแบบอนุกรม - S GC
  2. เครื่องกำจัดขยะแบบขนาน - P GC
  3. CMS เครื่องกำจัดขยะ - CMS GC
  4. G1 เครื่องเก็บขยะ - G1 GC
  5. เครื่องกำจัดขยะ Z ZGC

การใช้งานเริ่มต้นของ GC ใน 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)

รายละเอียดเพิ่มเติมสำหรับ ZGC กรุณาเยี่ยมชม

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

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

หมายเหตุ:หากคุณต้องการตรวจสอบว่า JVM ใช้ GC ใดอยู่คุณสามารถไปที่คำสั่งต่อไปนี้เพื่อแสดง GC เริ่มต้น: -

$ java -XX:+PrintCommandLineFlags -version 

หากคุณต้องการตั้งค่า GC ตามที่คุณต้องการคุณสามารถทำได้โดยทำตามคำสั่ง ที่นี่ฉันจะตั้ง G1 GC เป็น GC เริ่มต้น

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

ป้อนคำอธิบายภาพที่นี่

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


จะเป็นประโยชน์ในการกล่าวถึงแหล่งที่มาของแผนภาพสำหรับรายละเอียดเพิ่มเติม
xagaffar

2
สวัสดี @xagaffar นี่คือที่มา url javapapers.com/java/types-of-java-garbage-collectors
Brajesh

3
@Brajesh ฉันไม่คิดว่า ZGC เป็น GC เริ่มต้นของ JDK 11. เปิด JDK wiki ( wiki.openjdk.java.net/display/zgc/Main ) สถานะ "ใช้ -XX: + UnlockExperimentalVMOptions -XX: + ใช้อ็อพชัน ZGC เพื่อเปิดใช้งาน ZGC” นั่นหมายความว่าไม่ใช่ค่าเริ่มต้น
Ashish Kumar

1
ไม่ใช่ไม่ใช่ค่าเริ่มต้นของ JDK11 -XX: + UnlockExperimentalVMOptions -XX: + UseZGC options เพื่อเปิดใช้งาน ZGC เพื่อปลดล็อก ZGC
vsingh

1
แผนภาพการไหลของภาพมีประโยชน์อย่างมากในการอธิบายความแตกต่างระหว่างเครื่องเก็บขยะแบบ "อนุกรม" "ขนาน" และ "พร้อมกัน" แต่มันดูไร้สาระจริงๆกับสี่เหลี่ยมสีทั้งเก้านี้สำหรับตัวเก็บ G1 พวกเขาควรจะหมายถึงอะไร? กระทู้กลายเป็นสี่เหลี่ยม?
Holger

-1

ตั้งแต่ Java 9 จนถึง Java 15 G1GC เป็นค่าเริ่มต้นแม้กระทั่งใน Java 15 ซึ่งเพิ่มตัวเก็บขยะรุ่นใหม่สองตัวซึ่ง Oracle พัฒนา ZGC และการใช้งานหมวกแดงซึ่งเป็น Shenandoah ทั้งคู่พร้อมใช้งานจริงใน Java 15 กันยายนของปี 2020


1. Shenandoah ใช้กับ OpenJDK เท่านั้น Oracle ไม่มี 2. ZGC ไม่ใช่ GC เริ่มต้นสำหรับ JDK 8 หรือ 11 ซึ่งยังคงจำเป็นต้องใช้UnlockExperimentalVMOptionsแต่บน jdk 15 ไม่ใช่อีกต่อไป 3. ParallelGC เป็น GC เริ่มต้นสำหรับ JDK 8 ซึ่งเป็นคำถามที่นี่
Francisco Melo junior

ฉันบอกว่าตั้งแต่ Java 9 จนถึง Java 15 G1GC ยังคงเป็นค่าเริ่มต้น ... แม้ว่าจะมีการเพิ่ม GC ใหม่ 2 ตัวเมื่อเร็ว ๆ นี้
ก็ตาม

ไม่คุณบอกว่าSince Java 8 until Java 15 the G1GC is the default even on Java 15วลีไม่ถูกต้อง ค่าเริ่มต้น JDK 8 คือ Parallel คุณบอกว่าตัวเองแสดงความคิดเห็นคำตอบยังผิด Shenandoah สามารถใช้งานได้ใน JDK 8 และ JDK 11 ซึ่งถูกย้ายกลับ
Francisco Melo junior

ใช่ขอโทษฉันหมายถึงจาก Java 9
chiperortiz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.