Java 9中的紧凑字符串是什么?

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

      ---------
}