
JEP 535: Shenandoah เปลี่ยนค่าเริ่มต้นเป็นโหมด Generational
น้องกายEngineering
ทีมที่เปิด -XX:+UseShenandoahGC ควรรู้ว่าค่าเริ่มต้นของโหมดกำลังเปลี่ยน
JEP 535 สถานะ Targeted สำหรับ JDK 28 เปลี่ยนค่าเริ่มต้นของ ShenandoahGCMode จาก satb เป็น generational และ deprecate ค่า satb
พฤติกรรมหลังเปลี่ยน
-XX:+UseShenandoahGC→ ใช้ Generational Shenandoah- ระบุ
ShenandoahGCMode=generationalชัดๆ → เหมือนกัน - ระบุ
ShenandoahGCMode=satb→ ยังใช้โหมดเดิมได้ แต่มีคำเตือนว่าจะถูกถอดในอนาคต
เป้าหมายคือโฟกัสพัฒนาที่โหมดแบ่งรุ่น ซึ่งเก็บอ็อบเจ็กต์อ่อนบ่อยและของแก่น้อยครั้ง ลดโอเวอร์เฮด concurrent เพิ่ม throughput การจัดสรร และลด footprint ในงานส่วนใหญ่ตามที่ JEP ระบุ
ความเสี่ยงที่ทีมควรวัด
- เวิร์กโหลดที่จูนกับโหมดไม่แบ่งรุ่นอาจต้องปรับแฟล็กใหม่
- ล็อก GC และข้อมูล management API อาจต่างจากเดิม
- สคริปต์ที่ parse คำเตือน deprecate อาจสะดุด
JEP ย้ำว่ายังไม่ถอดโหมด non-generational ในรอบนี้ แค่ส่งสัญญาณทิศทาง
Recap
- บน JDK 28 การเปิด Shenandoah คือโหมด generational โดยค่าเริ่มต้น
- ถ้ายังต้อง satb ให้ตั้งชัดและวางแผนย้าย
- วัด latency/throughput หลังอัปก่อนโปรดักชัน
- อ่าน JEP 535 คู่กับโน้ต Generational Shenandoah ก่อนหน้า