VisualVM:如何找到堆中对象的大小,包括其所有引用对象及其字段?

10

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

在堆转储的类视图中,大小仅表示对象的“浅层”大小。我想知道通过字段间接引用的对象的总大小,即对象的总大小。

谢谢。

2个回答

11

在左侧面板上右键单击应用程序,然后选择“堆转储”(Heap dump)来获取堆转储文件。

在“Classes”选项卡中双击您所选类别的类别名称,将打开该类别的“instances”选项卡。

最后,在选项卡右上角单击“计算保留大小”(Compute Retained Sizes)。


2
如何进入“实例视图”?首先,获取堆转储(右键单击左侧面板中的应用程序,然后选择“堆转储”),然后在“类”选项卡中双击所选类别,即可打开该类别的“实例”选项卡。最后,在选项卡右上角单击“计算保留大小”。 - user1075613

0

您可以获取保留大小和浅层大小。差异请参见https://www.yourkit.com/docs/java/help/sizes.jsp
*) 获取“保留大小” jvisulVM->“监视器”选项卡->“堆转储”选项卡->进入创建的堆转储->单击“OQL控制台”->在其底部的“查询编辑器”中编写您的OQL SQL,例如查找值为“GHT”的字符串,则查询将为select s from java.lang.String s where s.toString().equals("GHT")->单击“执行”->在查询结果中单击所需引用->您可以在那里看到有关实例的信息,并单击“计算保留大小”以获取您想要的
*) 获取“浅层”大小 jvisulVM->“监视器”选项卡->“堆转储”选项卡->进入创建的堆转储->单击“OQL控制台”->在其底部的“查询编辑器”中编写您的OQL SQL,例如查找值为“GHT”的字符串,则查询将为select sizeof(s) from java.lang.String s where s.toString().equals("GHT")->单击“执行”->您将看到对象大小(以字节为单位)
更详细的信息,请参阅此处的“浅层”https://blogs.oracle.com/sundararajan/querying-java-heap-with-oql


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接