VisualVM:如何在堆中查找对象的大小,包括它从其字段引用的所有对象?

时间:2014-09-25 18:56:48

标签: java visualvm oql

如何在堆中找到对象的大小,包括它从其字段引用的所有对象?

在堆转储下的Classes视图中,大小仅表示对象的“浅”大小。我想知道对象的大小是什么,基本上是它通过字段引用的对象的总大小。

感谢

2 个答案:

答案 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