在Java中占用3个字节吗? when:String s =“abc”; Java的

时间:2012-09-16 14:44:32

标签: java memory compiler-construction jvm

如果我用Java写这个:

String s = "abc";  

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

3 个答案:

答案 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)