面试题:为什么 JDK 9 中将 String 的 char 数组改为 byte 数组?

在JDK 9中,String的内部表示从使用char[]数组改为使用byte[]数组,这一改变主要是为了优化内存使用和提高性能。

具体来说,之前的String实现使用的是char[]数组,每个字符占用2个字节(16位),即使对于只包含拉丁字母(ASCII)的字符串也是如此。这导致了内存使用的浪费,因为ASCII字符只需要1个字节即可表示。

为了解决这个问题,JDK 9引入了一种新的内部结构,称为Compact Strings。在这个新结构中,String类使用byte[]来存储字符数据,并且增加了一个编码标识字段来标记是使用了一字节还是两字节来存储字符。这意味着对于纯ASCII字符集的字符串,Java现在只需要原来一半的内存;而对于需要UTF-16编码的字符,则继续使用两个字节。

这种变化带来的主要优点包括:

  • 减少内存占用:对于那些大量使用ASCII字符的应用程序,可以显著降低内存消耗。
  • 提升性能:由于更高效地利用内存,垃圾回收的频率可能会降低,从而间接提高了性能。
  • 向前兼容性:尽管底层实现发生了变化,但是对开发者而言,String的行为没有改变,因此不会影响现有代码的正常运行。

总之,这项改进旨在让Java应用程序更加高效地处理字符串数据,特别是在处理大量文本数据时能够看到明显的内存节省效果。

THE END
喜欢就支持一下吧
点赞10 分享