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

在运行时内存分析器中查找并不是一件容易的事,Eclipse Memory Analyzer完成的堆转储分析也没有帮助。

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

我认为单凭这件事就可以使根本原因变得微不足道。

最佳答案

我不确定列出所有匿名类是否可以带您到任何地方,通常有很多匿名类。

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

JProfiler中,有一个相应的检查:

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

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

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

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

关于java - 如何在Java中找到匿名类的GC根?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34154655/

10-09 08:28