Java堆转储-java.lang.ref.Finalizer-引用java.util.jar.JarFile-是什么原因造成的?

时间:2018-12-19 05:35:08

标签: java spring

我使用以下命令获取了Java 8 jvm spring boot应用程序的堆转储:

jmap -dump:format=b,file=/myHeapDumpFile 123

当我打开文件时,YourKit Java Profiler显示以下内容。请注意 java.lang.ref.Finalizer 在列表顶部。

关于SO is memory leak? why java.lang.ref.Finalizer eat so much memory的另一个问题,解释了Object.finalize()方法的使用如何导致堆转储中的 java.lang.ref.Finalizer 。这不能解决我下面的问题。

我在下面的屏幕快照中编辑的jar文件名是应用程序,即应用程序打包到的核心jar文件。

  1. 从我的堆转储来看,这是一个问题,是不是有问题?这看起来是否超出正常数量的java.lang.ref.Finalizer对象。
  2. 如果是这样,我该如何解决。我如何确定是哪个代码/库引起的。我认为自己没有任何代码可以调用Object.finalize()。

该类有很多对象,它们看起来都与底部窗格中展开的对象相同。

enter image description here

点击屏幕右上角的“继续计算”链接后,经过几秒钟的延迟, java.lang.ref.Finalizer 所在的行从列表,保留的大小急剧减少。

Less java.lang.ref.Finalizer allocation after "Continue calculation"

0 个答案:

没有答案