Java HPROF 堆转储缺少字段?

Java HPROF heap dump missing fields?

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

似乎缺失的字段可能从未分配给,但这些缺失字段的值是什么?它们是 "zero" 值还是来自字段初始化程序的值?

编辑:

JVM 是 Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)

编辑 2:

似乎缺少的字段不是 "zero"(通过调试确认),但可能从未分配给。

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

根据HProf format documentation all fields of the object is stored in the dump, so MAT可以知道对象所有字段的值。


OQLwindow

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


支配树window 对我来说,MAT 显示了支配树 window.

中对象的所有属性

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

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

考虑 URLJarFile 中的名称属性:

如果我们选择 "List object -> with incoming references" 我们可以看到,这个字符串被几个对象引用:

问题是我查看的视图只应列出 对象引用 ,因此未显示 null 字段或原始值。

解决方案是添加 "Inspector" 视图或切换到专用的 "Memory Analysis" 透视图,它将显示每个选定实例的实际字段,如@Taky 的屏幕截图所示。