我已经进行了内存转储,用内存分析器对其进行了分析.它显示了
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
请告诉我.
最佳答案 这本身并不是泄漏.请阅读:
http://www.oracle.com/technetwork/articles/javase/finalization-137655.html关于JVM中的终结机制.
如果创建了太多的可调用对象,在你的情况下FileInputStream,终结器可能会成为一个问题.您可以尝试稍微减小堆大小,以便垃圾收集器更频繁地运行并更快地处理它们.
或者,如果可能的话,更好地减少对FileInputStreams的使用.