【发布时间】:2016-01-10 07:22:23
【问题描述】:
最近我偶然发现了这个JEP 254: Compact Strings,它主要针对:
总结:对字符串采用更节省空间的内部表示。
根据我目前的经验,Strings 和 char[] 占据了总堆消耗的很大比例。就像 JIRA 已经指出的那样:
String 类的当前实现将字符存储在 char 数组中,每个字符使用两个字节(16 位)。从许多不同应用程序收集的数据表明,字符串是堆使用的主要组成部分,此外,大多数 String 对象仅包含 Latin-1 字符。此类字符仅需要一个字节的存储空间,因此此类 String 对象的内部 char 数组中有一半空间未使用。
考虑到这一点,我有以下问题:
- 当
String只存储需要 1 个字节的字符并且构成堆配置文件的很大一部分时,其他开发人员当前如何处理此问题? - 为什么现在正在实施,而之前没有尝试过解决这个问题?
- 是否已经有旨在解决此问题的开源库?
我已经回答了诸如this 和this 之类的基本问题,这些问题涉及String 的相关事实,其中包括StringPool 和实习String 的工作原理以及为什么String 中的单个字符目前占用2 bytes。
【问题讨论】:
-
你能澄清一下“只有 UTF-8 字符”是什么意思吗?
-
我的意思是只需要一个字节来存储的字符。
-
我明白了。发明自己的术语总是很酷。您可能会在其他部分提到您的帖子中提到的 ASCII(基本上是 Unicode 的 0-127 范围)或 Latin-1 - 考虑是否有必要提出您自己的术语。
-
@AlexeiLevenkov 编辑了问题。