Java 9 के बाद से, JVM कॉम्पैक्ट नामक एक नई सुविधा का उपयोग करके स्ट्रिंग्स को अनुकूलित करता है। स्ट्रिंग्स . char[ . होने के बजाय ] सरणी , एक स्ट्रिंग को बाइट[] . के रूप में दर्शाया जा सकता है सरणी। हम या तो UTF-16 . का उपयोग कर सकते हैं या लैटिन-1 प्रति वर्ण एक या दो बाइट उत्पन्न करने के लिए। यदि JVM को पता चलता है कि स्ट्रिंग में केवल ISO-8859-1/Latin-1 है वर्ण, फिर स्ट्रिंग आंतरिक रूप से प्रति वर्ण एक बाइट का उपयोग करती है।
स्ट्रिंग को एक कॉम्पैक्ट स्ट्रिंग के साथ प्रदर्शित किया जा सकता है या नहीं पता लगाया जाता है जब स्ट्रिंग बनाई जाती है। यह सुविधा डिफ़ॉल्ट रूप से सक्षम है और -XX:-CompactStrings . का उपयोग करके स्विच ऑफ हो जाती है . यह एक char[] . पर वापस नहीं आता है कार्यान्वयन और सभी स्ट्रिंग्स को 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 --------- }