其中java存储本机对象

时间:2013-12-08 16:37:12

标签: java tomcat jprofiler

我一直在检查对象,我注意到java.lang.String的大小总是24个字节,无论它包含什么文本。

例如:

String str1 = "testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest";
String str2 = "test";

计算字符串'使用此方法的尺寸:

String test = "hello";
for(int i=0; i<10000; i++){
    test += test + i;
}
log.debug( Agent.inst.getObjectSize( test ) );

它告诉我两个字符串都是24个字节。

我知道所有对象只存储值的地址,而且该值是静态的,但我不了解我观察的内容。发生了什么事?

1 个答案:

答案 0 :(得分:1)

测量您正在使用的对象大小的技术太粗糙了:它只给出了String实例本身的大小,而不是它所引用的所有其他实例的大小 - 它的整个对象图。现有工具使用您使用的粗调用,结合反射来遍历对象图的其余部分,在每个步骤中调用相同的方法。

具体来说,String存储char[]中的字符数据,其对象大小与String占用的总内存最相关,对于任何更长的字符串。