如何在java中找到匿名类的GC根?

时间:2015-12-08 11:24:54

标签: java memory-leaks garbage-collection classloader memory-leak-detector

就在今天,我在我的应用中发现内存泄漏,其中大量对象被创建为匿名类。这是一个典型的例子,每个对象都有自己的类定义并放入堆中。

在运行时找到内存探查器并且Eclipse Memory Analyzer完成的堆转储分析也没有用。

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

我认为单独这件事会让找到根本原因变得微不足道。

1 个答案:

答案 0 :(得分:1)

我不确定列出所有匿名类会让你到任何地方,通常会有很多。

您可能需要的是搜索内部类引用(包括匿名类)保留的类实例的逻辑。

JProfiler中,有相应的检查:

enter image description here

检查创建的对象集包含所有此类实例,然后您可以显示GC根目录的路径:

enter image description here

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