Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以“查看”垃圾收集的对象图?_Java_Memory Management_Memory Leaks_Garbage Collection - Fatal编程技术网

Java 是否可以“查看”垃圾收集的对象图?

Java 是否可以“查看”垃圾收集的对象图?,java,memory-management,memory-leaks,garbage-collection,Java,Memory Management,Memory Leaks,Garbage Collection,我有一个Java应用程序正在泄漏内存。我知道哪些对象在垃圾收集期间没有被释放,但我无法确定是什么引用了它们 有可能对JVM内部保存的对象图有某种可见性吗 如果没有其他方法,就完全有可能找出哪些对象正在引用另一个对象?探查器会这样做。例如以前我用过它,现在它好像死了 结论是侦听器被传递到某个集合,而不是从该集合中移除。侦听器是在框架或引用该框架的相应控件类上定义的匿名内部类,匿名内部类具有对其外部类的隐式引用。因此,小侦听器在活动内存中保存了整个帧及其所有伴随对象。在一个非常基本的级别上,您可以使

我有一个Java应用程序正在泄漏内存。我知道哪些对象在垃圾收集期间没有被释放,但我无法确定是什么引用了它们

有可能对JVM内部保存的对象图有某种可见性吗

如果没有其他方法,就完全有可能找出哪些对象正在引用另一个对象?

探查器会这样做。例如以前我用过它,现在它好像死了


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

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

当你知道它们是什么对象时,为什么不能引用它们呢?这是一个J2ME应用程序。emulator的内存分析器告诉我,一个类有两个实例,而实际上应该只有一个。不幸的是,它没有告诉我更多。