You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单字符元素场景下List<Character>与List<String>的内存占用差异

List 与 List 存储单字符时的内存差异分析

二者的内存占用存在明显差异,List<Character>的内存开销要远小于List<String>,核心原因在于单个元素的内存结构差异:

单个元素的内存开销对比

  • Character包装类:在64位HotSpot虚拟机开启指针压缩的默认环境下,每个Character对象的对象头(Mark Word + Klass Pointer)占12字节,加上内部存储的原始char值(2字节),按8字节对齐后,单个Character对象总占用16字节。
  • String对象:单个String本身的对象头占12字节,还要存储char数组引用(4字节)、哈希值(4字节)等字段,对齐后String对象自身占24字节;再加上内部的char数组——哪怕只存一个字符,char数组的对象头(12字节)+ 字符值(2字节)对齐后也占16字节。算下来单个存单字符的String总开销约40字节(不同JDK版本细节略有差异,但远高于Character)。

List整体内存的差异

不管用ArrayList还是LinkedList,List本身存储的都是对象引用(压缩指针下每个引用占4字节),这部分二者一致,但元素本身的大小差距直接拉低了List<String>的内存效率。比如存储1000个单字符元素,List<Character>的元素总开销约16KB,而List<String>则约40KB,差距显著。

额外优化建议

如果追求极致内存效率,标准JDK里可以直接用char[]数组存储单字符;也可以使用第三方原始类型集合库(比如Eclipse Collections的CharList),避免包装类带来的额外开销。

内容的提问来源于stack exchange,提问作者JoReyner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 11:04:51