如何在堆中找到对象的大小,包括它从字段中引用的所有对象?
在堆转储下的Classes视图中,大小仅指示对象的"浅"大小。我想通过传递知道对象的大小,基本上是它通过字段引用的对象的总大小。
感谢
进行堆转储(右键单击左面板中的应用程序,然后"堆转储")
双击"中您选择的类;类";选项卡,它将打开";实例";选项卡。
最后点击";计算保留尺寸";在选项卡的右上角。
您可以获得"保留"one_answers"浅层"大小。差异见下文https://www.yourkit.com/docs/java/help/sizes.jsp
*)获取"保留大小"jvisulVM->"监视器"选项卡->"堆转储"选项卡->转到创建的堆转储->单击它"OQL控制台"->并在它的底部"查询编辑器"编写您的OQL sql,例如,找到带有val"GHT"的字符串,查询将是select s from java.lang.String s where s.toString().equals("GHT")
->单击"执行"->在查询结果中单击所需的参考->您可以看到有关您的实例的信息,然后您可以单击那里"计算保留大小"以获得所需大小
*)获取"浅"尺寸jvisulVM->"监视器"选项卡->"堆转储"选项卡->转到创建的堆转储->单击它"OQL控制台"->并在它的底部"查询编辑器"编写您的OQL sql,例如,要找到带有val"GHT"的字符串,查询将是select sizeof(s) from java.lang.String s where s.toString().equals("GHT")
->单击"执行"->您将看到您的对象大小(以字节为单位)
更详细的内容,你可以在这里阅读"Shallow"https://blogs.oracle.com/sundararajan/querying-java-heap-with-oql