如何在堆中找到对象的大小,包括它从其字段引用的所有对象?
在堆转储下的Classes视图中,大小仅表示对象的“浅”大小。我想知道对象的大小是什么,基本上是它通过字段引用的对象的总大小。
感谢
答案 0 :(得分:7)
转到“实例视图”,然后点击“计算保留的尺寸”。
答案 1 :(得分:0)
您可以获得保留和浅的大小。差异见https://www.yourkit.com/docs/java/help/sizes.jsp
*)获得“保留尺寸”
jvisulVM->“监视器”选项卡->“堆转储”选项卡->转到创建的heapdump->单击它的“ OQL控制台”->,然后在其底部的“查询编辑器”中编写您的OQL sql例如要查找带有val“ GHT”的字符串,查询将为select s from java.lang.String s where s.toString().equals("GHT")
->单击“执行”->,然后在查询结果中单击所需的引用->您可以看到有关实例的信息,然后单击那里有“计算保留的大小”以得到想要的
*)获得“浅”尺寸
jvisulVM->“监视器”选项卡->“堆转储”选项卡->转到创建的heapdump->单击它的“ OQL控制台”->,然后在其底部的“查询编辑器”中编写您的OQL sql例如找到带有val“ GHT”的字符串,查询将是select sizeof(s) from java.lang.String s where s.toString().equals("GHT")
->单击“ execute”->,您将看到对象大小以字节为单位
您可以在这里阅读更多详细信息“浅”
https://blogs.oracle.com/sundararajan/querying-java-heap-with-oql