java - Java 存储 native 对象的位置

标签 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 个字节。

我知道所有对象只存储值的地址并且该值是静态的,但我不明白我在观察什么。怎么回事?

最佳答案

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

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

关于java - Java 存储 native 对象的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20455861/

相关文章:

java - Liquibase格式的sql自动生成的id

java - 使用 Jetty 进行 JNDI 查找失败,用于与 MySQL 的 JDBC 连接池?

java - 在java中使用stanford词汇化解析器时的性能问题

amazon-web-services - 使用 Application Load Balancer 将 http 重定向到 https

java - java中的内存泄漏

java - HotSpot View 中 "java.lang.Thread.run"中的高自拍时间意味着什么?

java - hibernate 恩弗斯 : Get REVEND_TSTMP from revision entity

java - 写入应用程序特定文件的位置

tomcat - Grails 3.3 - 如何在 yml 配置文件中以开发模式设置嵌入式 tomcat 的 URIEncoding

java - JProfiler 显示 "unknown"JDBC 调用花费了 40% 的时间