JDK 27: JEP 534 เปิด Compact Object Headers เป็นค่าเริ่มต้น
ถ้าบริการของคุณสร้างอ็อบเจ็กต์สั้น ๆ จำนวนมาก JDK 27 อาจกินฮีปน้อยลงโดยที่คุณยังไม่แตะโค้ดครับ
JEP 534 ทำให้ compact object headers เป็นเลย์เอาต์เริ่มต้นใน HotSpot บนสถาปัตยกรรม 64-bit เฮดเดอร์หดจาก 96 บิต → 64 บิต ซึ่งช่วยลดขนาดฮีป เพิ่มความหนาแน่นของการดีพลอย และ locality ของข้อมูล ตามที่สรุปในInside.java วัน GA
ฟีเจอร์นี้ถูกทดลองมาตั้งแต่ JEP 450 / 519 (JDK 24/25) และเปิดด้วย -XX:+UseCompactObjectHeaders มาก่อน ใน 27 คุณไม่ต้องใส่ธงนั้นแล้ว ถ้าต้องถอยชั่วคราวใช้:
java -XX:-UseCompactObjectHeaders -version
JEP ระบุว่าเลย์เอาต์เก่า 96 บิตยังไม่ถูกลบในรอบนี้ และมีการทดสอบจากหลายองค์กรก่อนเป็นค่าเริ่มต้น
สิ่งที่ทีมควรทำหลังอัป 27
- เทียบ heap usage / GC count บนเวิร์กโหลดจริง
- เก็บธงปิดเป็นทางหนีเฉพาะเมื่อเจอรีเกรสชันที่พิสูจน์แล้ว
- อ่าน JEP ถ้ามีเนทีฟโค้ดที่สมมติขนาดเฮดเดอร์แบบเก่า
Recap
- อ่าน JEP 534
- รู้ว่า 27 เปิด compact headers เป็นค่าเริ่มต้นแล้ว
- วัดฮีปก่อน-หลังบน canary
- จด
-XX:-UseCompactObjectHeadersไว้เป็น rollback ชั่วคราว