我一直在检查对象,我注意到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个字节。
我知道所有对象只存储值的地址,而且该值是静态的,但我不了解我观察的内容。发生了什么事?
答案 0 :(得分:1)
测量您正在使用的对象大小的技术太粗糙了:它只给出了String
实例本身的大小,而不是它所引用的所有其他实例的大小 - 它的整个对象图。现有工具使用您使用的粗调用,结合反射来遍历对象图的其余部分,在每个步骤中调用相同的方法。
具体来说,String
存储char[]
中的字符数据,其对象大小与String
占用的总内存最相关,对于任何更长的字符串。