就在今天,我发现我的应用程序中存在内存泄漏,大量对象创建为匿名类。这是一个典型的例子,每个对象都定义了自己的类并将其放入堆中。
在运行时内存分析器中查找并非易事,Eclipse 内存分析器完成的堆转储分析也无济于事。
我想知道如何记录在运行时使用线程 ID(或至少是父类加载器)创建的所有匿名类。
我认为仅凭这一点就可以轻松找到根本原因。
最佳答案
我不确定列出所有匿名类是否能让你到达任何地方,通常有很多匿名类。
您可能需要的是搜索由内部类引用(包括匿名类)保留的类实例的逻辑。
在JProfiler ,有相应的检查:
检查创建的对象集包含所有此类实例,然后您可以显示到 GC 根的路径:
免责声明:我公司开发了 JProfiler。
关于java - 如何在 java 中找到匿名类的 GC 根?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34154655/