นากกายสีมิ้นต์แยกกองกล่องอ่อนกับกองกล่องแก่บนโต๊ะมิ้นต์หน้าป้าย GC

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 ก่อนหน้า