如果我用Java写这个:
String s = "abc";
s只占用内存中的3个字节吗?
如果为true,JVM如何找到String对象的结尾?
这会在内存中占用更多字节吗?
答案 0 :(得分:7)
需要超过3个字节,请继续阅读this page
的完整说明来自同一网站的由于以下原因,我们将探讨Java的最小内存使用情况 字符串(在Hotspot Java 6 VM中)通常如下:
Minimum String memory usage (bytes) = 8 * (int) ((((no chars) * 2) + 45) / 8)
或者,换句话说:
- 将字符串的字符数乘以2;
- 添加38;
- 如果结果不是8的倍数,则向上舍入到8的下一个倍数;
- 结果通常是字符串在堆上占用的最小字节数。
This page还详细说明了使用与String
答案 1 :(得分:2)
简短回答:不,不是远射。众所周知,JVM字符串非常繁重;该对象不仅包含指向字符数组的指针,还包含其长度。并且内部存储使用UTF-16代码点,因此您的问题可能是"是否需要6个字节?" : - )
对JVM的技术参考将为您提供字符串对象的确切大小。您还可以找到一些有趣的博客文章such as this one和技术文章。
字符串对象的确切大小问题还有很多。我们可以进入对象指针的压缩,字符串实习等。还有一个事实是,由于字符串是不可变的,我们经常共享字符串内存,就像你调用substring
时那样。
然而,总是如此:它超过3个字节。
答案 2 :(得分:1)
最小字符串内存使用量(字节)= 8 *(int)((((字符数)* 2)+ 45)/ 8)