hprof中没有“引用”的对象

我正在调查VisualVM中的一个hprof文件

服务器正在运行JDK 1.4.2_30并具有1 GB堆,NewSize为200 Mb。

hprof显示由56000个int[]实例占用的堆的71%,并且在VisualVM中查看时,这些56K数组中的任何一个都没有引用

按照我们的说法,如果有“没有参考”,这应该是垃圾收集。 所以问题是:

a)有什么方法可以找到这些参考?

b)这是不正确的快照 - 即采取堆转储做某种GC的行为?

c)我们应该看看VisualVM中的“保留大小”对象吗?

作为一个更新 - 我们仍然不知道这些int[]是什么,但接下来最大的对象是池中的Weblogic内部EJB引用,并且我们发现在其中一个将错误内存从早期频繁降低到30%的错误设置中完整的GC


免责声明:提前猜测,我没有明确的答案,但我可能会提供一些有用的提示。

最近我看到了类似的情况(尽管有更多的Java版本)。

大量未引用int[]似乎是某种映射的缓冲区(我不是NIO专家,但它似乎与此有关)。

这样做的原因的结论是,有一个非常相似的数byte[]周围几乎内存相同的大小,这些byte[]是由一些参考*Channel实例。

所以我的猜测是(是)那些int[]实际上是合成实例,实际上与byte[] (它们被正确地引用)共享它们的内存。 简而言之:他们是红鲱鱼。

所有这些都是很多猜测,我从未跟进过,因为当时的实际问题证明是完全不相关的。

链接地址: http://www.djcxy.com/p/81423.html

上一篇: Objects with "no references" in hprof

下一篇: How to save CHOICE MODE MULTIPLE