是否可以“查看”对象图以进行垃圾回收?

时间:2009-08-06 12:43:46

标签: java memory-management memory-leaks garbage-collection

我有一个泄漏内存的Java应用程序。我知道在垃圾收集过程中哪些对象没有被释放,但我无法弄清楚引用它们的是什么。

是否可以对JVM内部保存的对象图具有某种可见性?

在任何情况下都可以找出哪些对象引用了另一个对象?

2 个答案:

答案 0 :(得分:4)

在一个非常基础的层面上,您可以使用命令jhat和jmap从正在运行的Java进程中读取堆文件,然后对其进行处理 - 它会在本地端口上启动一个小型Web服务器。它并不容易阅读,但您不必购买分析器来使用它。

答案 1 :(得分:1)

Profilers这样做。例如JProfiler。在那天我使用了Optimizeit(现在似乎已经死了)。

结论是,听众被传递到某个集合,而不是从该集合中删除。侦听器是在Frame或引用Frame的相应控件类上定义的匿名内部类,而匿名内部类具有对其外部类的隐式引用。因此,小听众将整个框架及其所有伴随对象保持在活动记忆中。