4

我已经进行了内存转储,并使用内存分析器对其进行了分析。它显示了 java.lang.ref.finalizer 对象占用了 73% 的内存。我去看看这个非常大的物体里面有什么。我发现它看起来像对象的递归轨迹。如下所示

Finalizer
|__ Finalizer (recursive)
|__ java.io.FileInputStream or org.eclipse.jetty.util.resource.FileResource

在 FileResource 中,我找到了提取 war 文件的路径,但找不到 FileInputStream 对象中的内容。

也可以在此处找到屏幕截图。 https://lh4.googleusercontent.com/-uZTZ031DlqI/UD33kMskuZI/AAAAAAAABYo/eOrqw65k_Mw/s1179/summary.png

https://lh6.googleusercontent.com/-yWBPUV_71js/UD33kAYYDEI/AAAAAAAABYk/J9fF_WwOeO4/s1074/details.png

请告诉我。

4

1 回答 1

2

这本身不是泄漏。请阅读以下内容:http ://www.oracle.com/technetwork/articles/javase/finalization-137655.html关于 JVM 中的终结机制。

如果创建了太多 finalazble 对象(在您的情况下为 FileInputStream),终结器可能会成为问题。您可以尝试减少堆大小,以便垃圾收集器更频繁地运行并更快地处理它们。

或者,如果可能,最好减少对 FileInputStreams 的使用。

于 2012-08-30T06:04:42.483 回答