ประสิทธิภาพของสตริง (String) ใน JAVA ดีขึ้นอย่างมาก
(inside.java)บทนำ
- ใน 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 ที่อิงสตริงได้อย่างมาก
ยังไม่มีความคิดเห็น