Java 是否可以“查看”垃圾收集的对象图?
我有一个Java应用程序正在泄漏内存。我知道哪些对象在垃圾收集期间没有被释放,但我无法确定是什么引用了它们 有可能对JVM内部保存的对象图有某种可见性吗 如果没有其他方法,就完全有可能找出哪些对象正在引用另一个对象?探查器会这样做。例如以前我用过它,现在它好像死了Java 是否可以“查看”垃圾收集的对象图?,java,memory-management,memory-leaks,garbage-collection,Java,Memory Management,Memory Leaks,Garbage Collection,我有一个Java应用程序正在泄漏内存。我知道哪些对象在垃圾收集期间没有被释放,但我无法确定是什么引用了它们 有可能对JVM内部保存的对象图有某种可见性吗 如果没有其他方法,就完全有可能找出哪些对象正在引用另一个对象?探查器会这样做。例如以前我用过它,现在它好像死了 结论是侦听器被传递到某个集合,而不是从该集合中移除。侦听器是在框架或引用该框架的相应控件类上定义的匿名内部类,匿名内部类具有对其外部类的隐式引用。因此,小侦听器在活动内存中保存了整个帧及其所有伴随对象。在一个非常基本的级别上,您可以使
结论是侦听器被传递到某个集合,而不是从该集合中移除。侦听器是在框架或引用该框架的相应控件类上定义的匿名内部类,匿名内部类具有对其外部类的隐式引用。因此,小侦听器在活动内存中保存了整个帧及其所有伴随对象。在一个非常基本的级别上,您可以使用命令jhat和jmap从正在运行的Java进程读取堆文件,然后对其进行处理—它在本地端口上启动一个小型web服务器。阅读起来并不容易,但你不必购买分析器就可以使用它。当你知道它们是什么对象时,为什么不能引用它们呢?这是一个J2ME应用程序。emulator的内存分析器告诉我,一个类有两个实例,而实际上应该只有一个。不幸的是,它没有告诉我更多。