gpt4 book ai didi

Java HPROF 堆转储缺少字段?

转载 作者:行者123 更新时间:2023-11-30 03:01:47 25 4
gpt4 key购买 nike

我正在使用 Eclipse Memory Analyzer 查看 HPROF 文件。它为同一类的不同实例显示不同数量的字段:

看起来缺失的字段可能从未被分配过,但是这些缺失字段的值是多少?它们是“零”值还是来自字段初始值设定项的值?

编辑:

JVM 是 Java HotSpot(TM) 64 位服务器 VM(版本 25.40-b25,混合模式)

编辑2:

看起来缺失的字段不是“零”(通过调试确认),但可能从未分配过。

下面的 OQL 查询显示 Eclipse Memory Analyzer 实际上知道这些字段中的真实值,但只是选择不显示它们...

最佳答案

根据HProf format documentation对象的所有字段都存储在转储中,因此 MAT可以知道对象所有字段的值。

<小时/>

OQL窗口

对于 OQL,将显示除具有空值的引用之外的所有引用。

myWorkspaceMap is null for the object with 9 attributes

<小时/>

支配树窗口对我来说,MAT 在支配树窗口中显示对象的所有属性。

Attributes window

idea of the dominator tree是让非循环图 MAT 确定 closeController 拥有 URLJarFile 对象,并且不在主窗口中显示此属性。

此外,这意味着,如果有多个对特定对象的强引用,并且无法识别该对象的所有者,则该对象将不会显示在支配树中。

考虑 URLJarFile 中的 name 属性:

Name is not shown in the dominator tree

如果我们选择“列表对象 -> 带有传入引用”,我们可以看到,该字符串被多个对象引用:

String is referenced from several objects

关于Java HPROF 堆转储缺少字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35768924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com