Java 为什么可以';我没看到GC根吗?

Java 为什么可以';我没看到GC根吗?,java,heap-dump,eclipse-memory-analyzer,Java,Heap Dump,Eclipse Memory Analyzer,我有一个应用程序因OutOfMemory而崩溃。我将崩溃中的phd文件加载到Eclipse内存分析器中。我立即发现了一个相当可疑的ArrayList,它包含大约5700000个条目,每个条目都是一个包含16个空字节(????)内容的字符串。注意:我没有检查所有条目,但检查了一个较小的样本 毫不奇怪,我对谁持有这样一个愚蠢的东西感兴趣,所以我右键单击ArrayList并打开了“GC根路径”(使用所有引用或排除,似乎没有什么区别) 将打开一个新选项卡,仅显示一行ArrayList,并附加后缀“Unk

我有一个应用程序因OutOfMemory而崩溃。我将崩溃中的phd文件加载到Eclipse内存分析器中。我立即发现了一个相当可疑的ArrayList,它包含大约5700000个条目,每个条目都是一个包含16个空字节(????)内容的字符串。注意:我没有检查所有条目,但检查了一个较小的样本

毫不奇怪,我对谁持有这样一个愚蠢的东西感兴趣,所以我右键单击ArrayList并打开了“GC根路径”(使用所有引用或排除,似乎没有什么区别)

将打开一个新选项卡,仅显示一行ArrayList,并附加后缀“Unknown”

所以我的问题在标题中:为什么我看不到GC根?

涉及到的东西的不同版本

应用程序正在WebSphere8.x上运行,运行在一些1.6IBMJRE上

Eclipse内存分析器:1.5.0版


Java诊断工具框架(用于加载IBM转储):1.10.0.20121161052。我个人的理论是,由于内存不足,写堆的工作并不完全可靠

我从应用程序中创建了一个新的heapdump,而它工作正常。果然还有另一个奇怪的ArrayList实例,其中包含由空字节组成的字符串。不过,它只有10个条目,只占用了堆中非常小的一部分


该ArrayList有两条到GC根“系统类”的路径,一条是通过com.ibm.ws.security.core.WSAccessManager,另一条是通过com.ibm.ws.security.util.MultiDomainHelper。对于第一个问题,我发现了一个bug,这可能与此有关:

黑暗中的一枪:是否有其他内存分析器(JConsole.VisualVM?)的行为类似?@Rekin我没有发现任何能够读取IBM phd文件的错误。啊,所以扩展名不是一个打字错误。Sorry@Rekin不幸的是没有