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

Pet*_*iuk 6 java garbage-collection memory-leaks classloader memory-leak-detector

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

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

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

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

Ing*_*gel 2

我不确定列出所有匿名类是否能帮到您,因为通常有很多匿名类。

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

JProfiler中,有相应的检查:

在此输入图像描述

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

在此输入图像描述

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