Compact Strings ถูกนำมารวมใน Java 9 เพื่อแทนที่ Compressed Strings ของ Java 6 การใช้งาน Compact Strings ใช้ byte[] แทน char[] และมีฟิลด์ coder ใหม่เพื่อระบุว่าสตริงอยู่ในรูปแบบ LATIN1 หรือ UTF16 ในขณะที่ Compressed Strings ใน Java 6 ใช้ byte[] สำหรับตัวอักษร 1 ไบต์ และยังคงใช้ char[] สำหรับ 2 ไบต์ ต่อตัวอักษร ซึ่งสามารถเปิดใช้งานได้ด้วย -XX:+UseCompressedStrings
ไม่เหมือน Compressed Strings ที่ต้องทำ un-packing และ re-packing Compact Strings จึงให้ประสิทธิภาพรันไทม์ที่ดีกว่า
การเปิดใช้งาน
Compressed Strings ไม่ได้เปิดใช้งานโดยค่าเริ่มต้นใน Java 6 ต้องระบุอย่างชัดเจน:
-XX:+UseCompressedStrings
Compact Strings เปิดใช้งานโดยค่าเริ่มต้นใน Java 9 สามารถปิดได้ด้วย:
-XX:-CompactStrings
สรุปความแตกต่างหลัก
- การจัดเก็บ: Compact Strings ใช้ byte[] พร้อม coder flag ส่วน Compressed Strings ใช้ byte[] หรือ char[] สลับกัน
- ประสิทธิภาพ: Compact Strings ไม่ต้อง unpack/repack จึงเร็วกว่า
- ค่าเริ่มต้น: Compact Strings เปิดอยู่แล้วใน Java 9