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

Java中Protobuf反序列化后ASCII字符串的内存字节数计算咨询

Java纯ASCII字符String的内存占用说明

核心结论

  • Java 9及后续版本:String内部采用byte[]存储,纯ASCII字符(UTF-8编码仅1字节)会使用单字节紧凑存储,每个字符实际占用 1字节。这是Java 9对String存储的优化,会根据字符编码范围自动选择存储方式。
  • Java 8及更早版本:String内部基于char[]实现,char类型固定为UTF-16编码的2字节,因此即使是纯ASCII字符,每个字符也会占用 2字节。

和Protobuf反序列化的关联

结合你提供的Protobuf readString方法来看:

Protobuf序列化ASCII字符时,会以1字节的UTF-8格式存储;反序列化后生成的String,其内存占用完全遵循对应Java版本的String存储规则——Java 9+用单字节存储,Java 8及以下用双字节存储。

额外说明

String对象本身还包含固定的对象头开销(不同JVM实现略有差异,通常在12-16字节),这部分属于对象本身的开销,与字符数量无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 13:41:13