我一直在检查对象,我注意到 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 个字节。
我知道所有对象只存储值的地址并且该值是静态的,但我不明白我在观察什么。怎么回事?
最佳答案
您使用的测量对象大小的技术太粗糙了:它只为您提供 String
实例本身的大小,而不是它引用的所有其他实例的大小——它的大小整个对象图。现有工具使用您使用过的粗略调用,并结合反射来遍历对象图的其余部分,在每个步骤中调用相同的方法。
具体来说,String
将字符数据存储在char[]
中,其对象大小与String
占用的整体内存最相关code>,对于任何更长的字符串。
关于java - Java 存储 native 对象的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20455861/