Z Garbage Collector (ZGC) และ Shenandoah Garbage Collector (GC) เป็นทั้งนักสะสมขยะที่ทันสมัยต่ำที่ออกแบบมาเพื่อลดเวลาหยุดการใช้งานและปรับปรุงปริมาณงานในแอปพลิเคชัน Java แต่ละกรณีมีกรณีการใช้งานและจุดแข็งตามการออกแบบสถาปัตยกรรมและลักษณะการดำเนินงาน
กรณีการใช้ zgc:
ZGC เป็นตัวเก็บขยะที่ปรับขนาดได้ต่ำและมีความล่าช้าที่ออกแบบมาเพื่อทำงานคอลเลกชันขยะเกือบทั้งหมดพร้อมกับการดำเนินการของแอปพลิเคชัน ส่งผลให้เวลาหยุดชั่วคราวสั้นมากโดยทั่วไปจะอยู่ภายใต้มิลลิวินาทีซึ่งเป็นอิสระจากขนาดฮีป ZGC สามารถจัดการขนาดของกองตั้งแต่ไม่กี่ร้อยเมกะไบต์ไปจนถึงหลายเทราไบต์ (สูงถึง 16TB) การออกแบบหลักทำให้เหมาะสำหรับแอปพลิเคชันที่ต้องใช้เวลาหยุดชั่วคราวและน้อยที่สุดแม้ในขณะที่ขนาดฮีปเติบโตขึ้น
กรณีการใช้งานทั่วไปสำหรับ ZGC รวมถึง:
-แอปพลิเคชันที่มีความต้องการหน่วยความจำขนาดใหญ่เช่นการประมวลผลข้อมูลขนาดใหญ่ฐานข้อมูลในหน่วยความจำและระบบแคชขนาดใหญ่
-แอพพลิเคชั่นที่ไวต่อเวลาแฝงซึ่งความสามารถในการคาดการณ์และการตอบสนองเป็นสิ่งสำคัญเช่นระบบการซื้อขายความถี่สูง (HFT) และการวิเคราะห์แบบเรียลไทม์
- บริการที่จำเป็นต้องรักษาปริมาณงานคงที่โดยไม่ต้องหยุด GC นานเช่น microservices ในระบบกระจายขนาดใหญ่
- สภาพแวดล้อมที่แอปพลิเคชันน้อยที่สุดหยุดชั่วคราวลดการหยุดชะงักในแอปพลิเคชันแบบโต้ตอบหรือผู้ใช้
ตัวแปร Generational ของ ZGC ช่วยเพิ่มประสิทธิภาพและปริมาณงานของ CPU โดยการแยกกองเป็นรุ่นใหม่และรุ่นเก่าทำให้การสแกนบ่อยขึ้นและการส่งเสริมวัตถุที่มีอายุยาวนาน วิธีการทั่วไปนี้นำเสนอในเวอร์ชัน Java รุ่นใหม่นั้นเหมาะอย่างยิ่งสำหรับแอปพลิเคชันที่สร้างวัตถุระยะสั้นจำนวนมากและต้องใช้พฤติกรรมความล่าช้าต่ำอย่างยั่งยืน
Shenandoah GC ใช้กรณี:
Shenandoah GC ยังเป็นนักสะสมขยะที่เกิดขึ้นพร้อมกันและหยุดนิ่งที่มีจุดมุ่งหมายเพื่อลดเวลาหยุดชั่วคราวในระหว่างการรวบรวมขยะโดยการบดอัดพร้อมกับเธรดแอปพลิเคชัน สิ่งนี้จะช่วยลดความล่าช้าในการแฝงและขัดขวางการหยุดพักของโลกหยุดยาวใน GC แบบดั้งเดิม
กรณีการใช้งานทั่วไปสำหรับ Shenandoah GC รวมถึง:
- แอปพลิเคชันที่มีความต้องการเวลาตอบสนองความล่าช้าต่ำที่สอดคล้องกันและการหยุด GC ที่น้อยที่สุด
- แอปพลิเคชั่นกองขนาดกลางถึงขนาดใหญ่ที่มีการกระจายตัวเป็นกังวลเนื่องจาก Shenandoah กะทัดรัดอย่างจริงจังเพื่อจัดการการกระจายตัว
- แอปพลิเคชันที่ได้รับประโยชน์จากการบดอัดพร้อมกันโดยไม่มีความซับซ้อนของการระบายสีตัวชี้เฉพาะและกลไกอุปสรรคเช่นเดียวกับใน ZGC
-สถานการณ์โดยเฉพาะอย่างยิ่งใน Java 21 หรือใหม่กว่าที่ซึ่งการทดลองรุ่น Shenandoah GC ช่วยเพิ่มปริมาณงานและปรับปรุงความยืดหยุ่นในการโหลดในสภาพแวดล้อมที่มีความจำสูง
การพิจารณาประสิทธิภาพและความเหมาะสม:
- ZGC ได้รับการออกแบบมาเพื่อปรับขนาดอย่างมีประสิทธิภาพให้เป็นขนาดกองขนาดใหญ่มาก (หลายเทอร์ไบต์) รักษาเวลาหยุดชั่วคราวที่สอดคล้องกันซึ่งส่วนใหญ่ไม่ได้รับผลกระทบจากการขยายตัวของกอง สิ่งนี้ทำให้เหมาะสำหรับแอปพลิเคชันขนาดใหญ่เช่นข้อมูลขนาดใหญ่และชั้นแคชที่กว้างขวาง
- Shenandoah เก่งในสถานการณ์ที่มีขนาดฮีปขนาดกลางแสดงปริมาณงานที่ดีกว่า ZGC ภายใต้เงื่อนไขการใช้ RAM ในระดับปานกลาง มันปรับปรุงการใช้หน่วยความจำโดยการบดอัดอย่างก้าวร้าวและเหมาะสำหรับการใช้งานที่มีการจัดลำดับความสำคัญของปริมาณงานที่ยั่งยืน
-นักสะสมทั้งสองปรับปรุงความสามารถในการแข่งขันของ Java สำหรับข้อกำหนดด้านความล่าช้าที่ต่ำเป็นพิเศษโดยทั่วไปในการซื้อขายทางการเงินโทรคมนาคมการเล่นเกมและการวิเคราะห์แบบเรียลไทม์
- การใช้เทคนิคขั้นสูงของ ZGC เช่นพอยน์เตอร์สีและอุปสรรคในการโหลดช่วยให้การทำเครื่องหมายพร้อมกันอย่างมีประสิทธิภาพและการย้ายวัตถุซึ่งมีส่วนทำให้ความสามารถในการลดเวลาหยุดชั่วคราว
- ข้อได้เปรียบหลักของ Shenandoah อยู่ในกลยุทธ์การบดอัดพร้อมกันลดการกระจายตัวของหน่วยความจำและให้เวลาแฝงที่คาดการณ์ได้ด้วยเวลาหยุดชั่วคราวต่ำ
สรุปกรณีการใช้งานที่โดดเด่น:
- ZGC มักจะได้รับการสนับสนุนสำหรับกองและแอปพลิเคชันขนาดใหญ่มากซึ่งเวลาแฝงที่คาดการณ์ได้ซึ่งเป็นอิสระจากขนาดกองเป็นสิ่งสำคัญยิ่ง เหมาะกับการใช้เคสในแพลตฟอร์มข้อมูลขนาดใหญ่และระบบที่สำคัญแฝง
- Shenandoah ได้รับเลือกสำหรับแอปพลิเคชันที่ต้องใช้เวลาหยุดชั่วคราวต่ำอย่างสอดคล้องกันโดยมุ่งเน้นไปที่การบดอัดหน่วยความจำเพื่อลดการกระจายตัวการใช้งานที่เหมาะสมกรณีในระบบกลางถึงขนาดใหญ่ที่มีอายุการใช้งานวัตถุที่หลากหลายเช่นฐานข้อมูลและระบบเรียลไทม์ที่ได้รับประโยชน์จากการปรับปรุงการรวบรวม