就在今天,我在我的应用程序中发现了内存泄漏,其中大量对象被创建为匿名类。这是一个经典的例子,每个对象都有自己的类定义并放入堆中。
在运行时内存分析器中查找并非易事,Eclipse 内存分析器完成的堆转储分析也没有帮助。
我想知道如何使用线程 ID(或至少是父类加载器)记录在运行时创建的所有匿名类。
我认为仅此一件事就会使寻找根本原因变得微不足道。
就在今天,我在我的应用程序中发现了内存泄漏,其中大量对象被创建为匿名类。这是一个经典的例子,每个对象都有自己的类定义并放入堆中。
在运行时内存分析器中查找并非易事,Eclipse 内存分析器完成的堆转储分析也没有帮助。
我想知道如何使用线程 ID(或至少是父类加载器)记录在运行时创建的所有匿名类。
我认为仅此一件事就会使寻找根本原因变得微不足道。
我不确定列出所有匿名课程是否会让您有所收获,通常有很多。
您可能需要的是搜索内部类引用(包括匿名类)保留的类实例的逻辑。
在JProfiler中,有相应的检查:
检查创建的对象集包含所有此类实例,然后您可以显示到 GC 根的路径:
免责声明:我公司开发 JProfiler。