jvm Java中的s是否需要3个字节?when:String s =“abc”; Java

mbjcgjjk  于 7个月前  发布在  Java
关注(0)|答案(3)|浏览(74)

如果我用Java写:

String s = "abc";

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

tgabmvqs

tgabmvqs1#

它需要超过3个字节,请继续阅读this page中的完整解释
由于我们将在下面探讨的原因,Java String(在Hotspot Java 6 VM中)的最小内存使用量通常如下:

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

或者,换句话说:

  • 将String的字符数乘以2;
  • 加38;
  • 如果结果不是8的倍数,则向上舍入到下一个8的倍数;
  • 结果通常是String在堆上占用的最小字节数。

来自同一网站的This page还详细介绍了使用与String不同的类来保存内存的方法

kx1ctssn

kx1ctssn2#

简短回答:不,绝对不是。众所周知,JVM字符串非常重;该对象不仅包含指向字符数组的指针,还包含其长度。内部存储使用UTF-16代码点,所以你的问题可能是“它需要6个字节吗?“:-)
JVM的技术参考将给予您字符串对象的确切大小。您还可以找到一些有趣的博客文章such as this one和技术文章。
关于字符串对象的确切大小问题还有很多。我们可以进入到对象指针的压缩,字符串实习等。还有一个事实是,由于字符串是不可变的,我们经常共享字符串内存,例如当您调用substring时就会发生这种情况。
然而,永远正确的是:超过3个字节。

u3r8eeie

u3r8eeie3#

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

相关问题