Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

Compact Strings ใน Java 9 คืออะไร

ตั้งแต่ Java 9 JVM เพิ่มประสิทธิภาพสตริงด้วยฟีเจอร์ใหม่ชื่อ Compact Strings แทนที่จะใช้ char[] array สตริงสามารถแทนได้ด้วย byte[] array ใช้ UTF-16 หรือ Latin-1 ผลิต 1 หรือ 2 ไบต์ต่อตัวอักษร หาก JVM ตรวจพบว่าสตริงมีเฉพาะตัวอักษร ISO-8859-1/Latin-1 จะใช้ 1 ไบต์ต่อตัวอักษรภายใน

การแทนสตริงด้วย compact string หรือไม่ จะถูกตัดสินใจตอนสร้างสตริง ฟีเจอร์นี้ เปิดใช้งานโดยค่าเริ่มต้น ปิดได้ด้วย -XX:-CompactStrings ไม่ย้อนกลับไปใช้ char[] implementation และเก็บทุกสตริงเป็น UTF-16

เปรียบเทียบโครงสร้าง String

Java 8

public class String {
    private final char[] value; // เก็บตัวอักษรในสตริง
    // ...
}

Java 9 (Compact Strings)

public class String {
    private final byte[] value; // เก็บตัวอักษรในสตริง
    private final byte coder;   // flag: 1 ไบต์ต่อตัวอักษร หรือ 2 ไบต์ต่อตัวอักษร
    // ...
}

ประโยชน์ของ Compact Strings

  • ลดหน่วยความจำ: สตริง ASCII/Latin-1 ใช้พื้นที่ลดลง 50%
  • ประสิทธิภาพดีขึ้น: Cache friendly มากขึ้น เนื่องจากขนาดเล็กลง
  • ไม่ต้อง unpack/repack: ต่างจาก Compressed Strings เดิม
  • รองรับ UTF-16: ยังคงรองรับ Unicode เต็มรูปแบบได้

การตรวจสอบ

สามารถดู coder ได้ผ่าน reflection หรือการ debug:

  • coder = 0 → LATIN1 (1 byte/char)
  • coder = 1 → UTF16 (2 bytes/char)