บทนำ

  • ใน JDK 25 มีการปรับปรุงให้ String::hashCode ส่วนใหญ่ถูกประมวลผลแบบ constant folding
  • ประสิทธิภาพดีขึ้นอย่างมากเมื่อค้นหาคีย์สตริงใน Map แบบ immutable

เนื้อหา

  • ในโครงสร้าง Map<String, MethodHandle> การ lookup คีย์ถูกปรับให้เหมาะสมแบบสแตติก
  • ภายในมีการใช้ @Stable กับฟิลด์ String.hash ทำให้เมื่อค่า hash ถูกตรึงแล้ว JVM จะเชื่อถือค่าแคชนั้น
  • ส่งผลให้ทั้งการคำนวณแฮช การคำนวณดัชนีของ Map และการค้นหาเมธอดแฮนเดิล ถูกทำให้เป็นค่าคงที่ตั้งแต่คอมไพล์ไทม์
  • ผล benchmark ยืนยันว่าประสิทธิภาพดีขึ้นได้สูงสุดมากกว่า 8 เท่าเมื่อเทียบกับ JDK 24 เดิม
  • ข้อเสียคือถ้า hashcode เป็น 0 จะไม่เกิด constant folding (รวมถึงสตริง "")
  • คาดว่าจะมีการเปิดให้ใช้ความสามารถลักษณะเดียวกันในโค้ดของผู้ใช้ผ่าน JEP 502 ในอนาคต

สรุป

  • การเพิ่มประสิทธิภาพ String ใน JDK 25 มีผลดีต่อโค้ดที่อิงโครงสร้างแบบสแตติก
  • @Stable ยังเป็นของใช้ภายใน แต่มีแนวโน้มจะขยายเป็นความสามารถสาธารณะในอนาคต
  • หากใช้ JDK รุ่นล่าสุด ก็สามารถเพิ่มประสิทธิภาพการประมวลผล Map ที่อิงสตริงได้อย่างมาก

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น