Java的字符串使用多少内存(java字符串内存占用)

Java7或更低

最小字符串内存使用量:

(bytes) = 8 * (int) ((((no chars) * 2) + 45) / 8)

所以

80 = 8 * (int) ((((19) * 2) + 45) / 8)

了解字符串内存使用情况:

要理解上述计算,我们需要从查看 String 对象上的字段开始。一个字符串包含以下内容:

  • 一个包含实际字符的 char 数组——因此是一个单独的对象;
  • 字符串开始的数组中的整数偏移量;
  • 字符串的长度;
  • 另一个用于缓存计算哈希码的 int。

这意味着即使字符串不包含字符,它也需要 4 个字节用于 char 数组引用,加上 3*4=12 个字节用于三个 int 字段,再加上 8 个字节的对象头。这给出了 24 个字节(这是 8 的倍数,因此到目前为止不需要“填充”字节)。

然后,(空)char 数组将需要另外 12 个字节(数组有额外的 4 个字节来存储它们的长度),在这种情况下加上 4 个字节的填充,以使 char 数组对象使用的内存达到16. 因此,一个空字符串总共使用 40 个字节。

如果String包含 19 个字符,那么 String 对象本身仍然需要 24 个字节。但是现在 char 数组需要 12 个字节的标题加上 19*2=38 个字节的 17 个字符。由于 12+38=50 不是 8 的倍数,我们还需要四舍五入到下一个 8 的倍数 (56)。所以总的来说,我们的 19 个字符String将使用 56+24 = 80 个字节。

Java的字符串使用多少内存(java字符串内存占用)

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注