10

我在 Java 中有一个包含字符串的对象。我很好奇 String 的内存使用是如何工作的。我正在尝试优化我的程序的内存使用,应用程序将有大约 10000 个这样的对象。对于诸如“Hello World”之类的字符串,内存使用量是多少?

4

1 回答 1

12

Java 每个字符*使用两个字节,因此您需要将字符数乘以 2 以获得粗略的近似值。除了“有效负载”的存储之外,您还需要考虑分配给字符串引用的空间,这通常等于目标架构上指针的大小,字符串长度的空间,这是一个int,以及缓存的哈希码的空间,这是另一个int

因为,"Hello World"是 11 个字符长,我估计它的大小在 32 位指针的计算机上为 2*11+4+4+4=34 字节,或在 64 位指针的计算机上为 2*11+8+4+4=38 字节位指针。

注意:这个估计没有考虑实习字符串常量的影响。当一个字符串被interned时,对 interned string 的所有引用共享相同的有效负载,因此每个额外的 interned string 实例的额外内存是引用的大小(即目标体系结构上的指针大小)。


*除非-XX:+UseCompressedStrings使用该选项,在这种情况下不需要 UTF-16 的字符串使用 UTF-8 编码。

于 2013-11-04T20:30:44.027 回答