如何在Java中查找匿名类的GC根?

6

我今天刚刚发现我的应用程序存在内存泄漏问题,因为创建了大量的匿名类对象。每个对象都有自己定义的类,并置于堆中,这是一个典型的例子。

在运行时内存分析器中找到它并不容易,由 Eclipse Memory Analyzer 执行的堆转储分析也没有帮助。

我想知道如何记录所有在运行时创建的匿名类以及线程 ID(或至少父类加载器)。

我认为单凭这一点就可以轻松找到根本原因。

1个回答

2
我不确定列出所有匿名类会有什么作用,因为通常会有很多这样的类。
你可能需要的是逻辑来搜索被内部类引用(包括匿名类)保留的类实例。
JProfiler中,有一个相应的检查工具:

enter image description here

检查创建的对象集包含所有这样的实例,然后您可以显示到GC根的路径:

enter image description here

免责声明:我的公司开发JProfiler。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接