Java中s占用3个字节吗?当:字符串 s =“abc”;爪哇

问题描述 投票:0回答:3

如果我用 Java 写这个:

String s = "abc";  

s在内存中只占用3个字节吗?
如果为 true,JVM 如何找到 String 对象的末尾?
这会占用更多内存字节吗?

java memory jvm
3个回答
7
投票

它需要超过 3 个字节,请继续阅读此页面

的完整说明

出于我们将在下面探讨的原因,Java 的最小内存使用量 字符串(在Hotspot Java 6 VM中)一般如下:

Minimum String memory usage (bytes) = 8 * (int) ((((no chars) * 2) + 45) / 8)

或者,换句话说:

  • 将字符串的字符数乘以二;
  • 添加38;
  • 如果结果不是 8 的倍数,则四舍五入到下一个 8 的倍数;
  • 结果通常是 String 在堆上占用的最小字节数。
来自同一网站的

此页面还详细介绍了使用与

String

不同的类来节省内存的方法

2
投票

简短的回答:不,绝对不是。 众所周知,JVM 字符串非常重;该对象不仅包含指向字符数组的指针,还包含其长度。 并且内部存储使用 UTF-16 代码点,因此您的问题可能是“它需要 6 个字节吗?” :-)

JVM 的技术参考将为您提供字符串对象的准确大小。 您还可以找到一些有趣的博客文章例如这篇文章和技术文章。

字符串对象的确切大小问题还有很多内容。 我们可以压缩对象指针、字符串驻留等。还有一个事实是,由于字符串是不可变的,因此我们经常共享字符串内存,例如当您调用

substring
时就会发生这种情况。

但是,始终正确的是:它超过 3 个字节。


1
投票

最小字符串内存使用量(字节)= 8 * (int) ((((字符数) * 2) + 45) / 8)

© www.soinside.com 2019 - 2024. All rights reserved.