ตั้งแต่ Java 9 JVM จะปรับสตริงให้เหมาะสมโดยใช้คุณลักษณะใหม่ที่เรียกว่า กะทัดรัด สตริง . แทนที่จะมี อักขระ[ ] อาร์เรย์ สตริงสามารถแสดงเป็น byte[] อาร์เรย์ เราสามารถใช้ UTF-16 . อย่างใดอย่างหนึ่งก็ได้ หรือ ละติน-1 เพื่อสร้างหนึ่งหรือสองไบต์ต่ออักขระ หาก JVM ตรวจพบสตริงที่มีเฉพาะ ISO-8859-1/Latin-1 อักขระ จากนั้นสตริงจะใช้หนึ่งไบต์ต่ออักขระภายใน
สตริงสามารถแสดงด้วยสตริงที่กระชับหรือไม่ถูกตรวจพบเมื่อสร้างสตริง คุณลักษณะนี้เปิดใช้งานโดยค่าเริ่มต้นและปิดโดยใช้ -XX:-CompactStrings . ไม่เปลี่ยนกลับเป็น อักขระ[] ใช้งานและจัดเก็บสตริงทั้งหมดเป็น UTF-16
// In Java 8 public class String { private final char[] value; // Stores characters in the string --------- } // In Java 9 public class String { private final byte[] value; // Stores characters in the string private final byte coder; // a flag whether to use 1 byte per character or 2 bytes per characters for this string --------- }