是否有可能“看到”垃圾收集的对象图?

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

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

否则可以找出哪些对象引用另一个对象?

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

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

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