一直到 Java 8,Strings 在 Java 中使用字符数组进行存储的,同时使用的是 UTF-16 字符集,因此每一个字符将会使用 2 字节的内存。
从 Java 9 开始,Java 提供了一个叫做压缩字符(Compact Strings)的存储概念。
这个存储将会针对字符串使用 char[] 和 byte[] 中字符编码,这个将会与你需要存储的内容有关。
简单来说就是从 Java 9 开始,String 将会根据存储内容的不同来使用不同的存储格式,只会在必要的时候才会使用 UTF-16 编码,这种设计将会显著降低 String 对内存的使用,并且能够让来让垃圾清理程序(Garbage Collector)更有效率的工作。
简单来说就是 Java 9 以后对 String 字符串的存储进行了优化,针对不同字符集设置了不同的存储方案以降低空间的使用。
https://www.ossez.com/t/java-string-pool/14017