在大多数关于终结器对象引起的内存泄漏的研究中,无论是在我们的代码中还是在依赖的库中,都应该覆盖finalize方法。但在我的整个项目中,它没有任何用处。(我使用的是Java8)
我正面临着一个内存问题,对于我的服务,只要我重新启动服务,可用内存就会开始减少,并且在7天内减少了95%,随后会出现频繁的警告。

上图显示了Y轴上的可用内存,可以看到减少的内存。上图中的所有峰值都用于重新启动服务。
当我在eclipse Mat中查看堆转储时,我看到了以下内容:

可以看出,几乎所有的空间都只由一个对象占用,即java.lang.ref.Finalizer,但是当我在项目中进行现场Java搜索时,我没有看到任何使用finalize()方法的代码。
我在寻找内存泄漏的过程中遇到了死胡同。是否还有其他可能导致此问题的原因。



发布于 2021-10-04 13:54:31
我要做的第一件事就是试着理解Finalizer是从哪里来的--检查你的库,试着找出它!也许他们甚至在他们的自述文件/文档中提到了什么?
在那之后,看看这个answer/question,它可以给你一些见解。此外,在我看来,这与GC有关。既然你提到了java 8,你应该使用并行GC (默认的),这是不错的,但你可以试着使用它,改变GC,看看其他选项是否对你更好。
https://stackoverflow.com/questions/69437142
复制相似问题