如何找到堆中对象的大小,包括它所引用的所有对象?
在堆转储的类视图中,大小仅表示对象的“浅层”大小。我想知道通过字段间接引用的对象的总大小,即对象的总大小。
谢谢。
在左侧面板上右键单击应用程序,然后选择“堆转储”(Heap dump)来获取堆转储文件。
在“Classes”选项卡中双击您所选类别的类别名称,将打开该类别的“instances”选项卡。
最后,在选项卡右上角单击“计算保留大小”(Compute Retained Sizes)。
您可以获取保留大小和浅层大小。差异请参见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