6

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

在运行时内存分析器中查找并非易事,Eclipse 内存分析器完成的堆转储分析也没有帮助。

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

我认为仅此一件事就会使寻找根本原因变得微不足道。

4

1 回答 1

2

我不确定列出所有匿名课程是否会让您有所收获,通常有很多。

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

JProfiler中,有相应的检查:

在此处输入图像描述

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

在此处输入图像描述

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

于 2015-12-08T14:54:38.273 回答