从Java 9开始,JVM通过使用名为Compact Strings的新功能来优化字符串。代替使用char [ ] 数组,可以将字符串表示为byte []数组。我们可以使用UTF-16或Latin-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 --------- } //在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 --------- }