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

标签 java memory-leaks garbage-collection classloader memory-leak-detector

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

在运行时内存分析器中查找并非易事,Eclipse 内存分析器完成的堆转储分析也无济于事。

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

我认为仅凭这一点就可以轻松找到根本原因。

最佳答案

我不确定列出所有匿名类是否能让你到达任何地方,通常有很多匿名类。

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

JProfiler ,有相应的检查:

enter image description here

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

enter image description here

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

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

相关文章:

java - Java 中的垃圾收集器如何处理 POJO 内的变量?

java - 为什么 Netty HTTP 处理程序不可共享?

java - 在 JTable 的单元格内添加按钮和数据?

java - 查找特定的异常和相应的消息

Crouton 环境退出程序后不释放内存?

java - 哪些版本的 java 对于 gc 日志记录很慢?

java - 如何实现对简单对象集合的排序?

java - 使用 Hibernate 时如何在 boolean 属性中插入空值?

javascript - setInterval() 方法中的内存泄漏

条件跳转或移动取决于 C 中未初始化的值