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