แถบอ็อบเจ็กต์กว้างเทียบแถบแคบบนการ์ดมิ้นต์มีจุดอำพันด้านล่าง

JDK 27: JEP 534 เปิด Compact Object Headers เป็นค่าเริ่มต้น

น้องกายEngineering

ถ้าบริการของคุณสร้างอ็อบเจ็กต์สั้น ๆ จำนวนมาก 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

  1. เทียบ heap usage / GC count บนเวิร์กโหลดจริง
  2. เก็บธงปิดเป็นทางหนีเฉพาะเมื่อเจอรีเกรสชันที่พิสูจน์แล้ว
  3. อ่าน JEP ถ้ามีเนทีฟโค้ดที่สมมติขนาดเฮดเดอร์แบบเก่า

Recap

  • อ่าน JEP 534
  • รู้ว่า 27 เปิด compact headers เป็นค่าเริ่มต้นแล้ว
  • วัดฮีปก่อน-หลังบน canary
  • จด -XX:-UseCompactObjectHeaders ไว้เป็น rollback ชั่วคราว