
JEP 523: G1 เป็น GC ค่าเริ่มต้นทุกสภาพแวดล้อมใน JDK 27
คอนเทนเนอร์เล็กหรือเครื่องหน่วยความจำน้อยที่เคยได้ Serial GC โดยอัตโนมัติ จะได้พฤติกรรมใหม่เมื่อไม่ระบุตัวเก็บขยะ
JEP 523 ใน JDK 27 เปลี่ยนกฎว่าถ้าไม่ระบุ GC บนคอมมานด์ไลน์ HotSpot จะ เลือก G1 เสมอ ไม่ว่าจำนวนซีพียูหรือแรมจะเท่าไร ก่อนหน้านี้ตั้งแต่ JDK 9 G1 เป็นค่าเริ่มต้นในเซิร์ฟเวอร์ แต่สภาพแวดล้อมจำกัด (เช่น ซีพียูเดียวหรือแรมต่ำกว่าเกณฑ์เดิม) อาจได้ Serial
G1 หรือ Garbage-First คือตัวเก็บขยะที่บาลานซ์ระหว่าง throughput กับ latency โดยเก็บหน่วยความจำเป็นช่วง ๆ ไม่ต้องพึ่ง full collection บ่อยเท่า Serial ในหลายเคส
ทำไมทีม HotSpot ถึงเปลี่ยน
JEP อธิบายว่า G1 ถูกปรับปรุงจนเทียบเคียง Serial ในหลายเมตริกบนสภาพแวดล้อมจำกัด รวมงานลด synchronization จาก JEP ที่เกี่ยวข้อง และลดการใช้ native memory จึงถือว่าพร้อมแทนที่การเลือก Serial อัตโนมัติ
เป้าหมายสำคัญคือเมื่อไม่ระบุ GC แล้วได้ G1 และในเคสที่เคยได้ Serial ประสิทธิภาพไม่ควรถดถอยอย่างมีนัยสำคัญตามเกณฑ์ทดสอบของทีม
สิ่งที่ยังทำได้เหมือนเดิม
ถ้าระบุ GC เอง เช่น Serial, Parallel หรือ ZGC คำสั่งนั้นยังชนะค่าเริ่มต้น JEP ไม่ได้ลบหรือเลิกใช้ตัวเก็บขยะตัวอื่น
Recap
- บน JDK 27 ถ้าวาง
-Xmxเล็กและไม่ใส่-XX:+Use...GCให้ถือว่าได้ G1 - ถ้า workload เล็กยังต้องการ Serial ให้ใส่แฟล็กชัดเจน
- วัด throughput, latency, footprint และเวลาสตาร์ทบน RC ก่อนขึ้นจริง
- อ่าน JEP 523 คู่กับหน้า JDK 27 ก่อนเปลี่ยนอิมในคลัสเตอร์ครับ