我的内存泄漏看起来像这样:
 

Eclipse Memory Analyzer没有那么多的经验,我想知道它是否可以回答这两个问题:


这些实例中的大多数实例分配到的源代码位置是什么?
他们没有被垃圾收集的原因是什么?


他们停了下来,但仍然在某处引用了吗?
他们还在执行还是睡觉?



编辑:看起来sbridges是正确的,我的线程永不消亡。但是我真的不确定原因,因为stacktrace似乎不包含我的任何代码。我使用ExecutorService的方式肯定是错误的。

最佳答案

您的代码在某个地方创建了线程,而这些线程永不消亡。线程不能被垃圾回收,因为线程是gc根。调试此问题的最简单方法是启动应用程序,等到拥有大量线程后,再使用JConsole连接到应用程序,然后查看线程的堆栈跟踪。要查看堆栈跟踪,请单击threads tab并单击活动线程下的线程。

关于java - 获取有关特定内存泄漏的更多详细信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7215007/

10-14 10:20