2011-08-27 65 views
0

我的内存泄漏看起来是这样的: leak获取对特定存储更多细节泄露

有与Eclipse Memory Analyzer没有那么多经验,我不知道是否能回答这两个问题:

  • 有什么源代码位置,其中大部分实例是分配的?
  • 他们没有收集垃圾的原因是什么?
    1. 他们停止了,但仍然在某处被引用?
    2. 他们仍在执行或睡眠?

编辑:看起来sbridges是正确的,我只是线程永远不死。然而,我不确定这个原因,因为stacktrace似乎没有包含我的任何代码。我使用ExecutorService的方式肯定是错的。

threads

回答

3

某处你的代码创建线程,这些线程永远不死。线程不能被垃圾收集,因为一个线程是一个gc根。调试这个最简单的方法是启动应用程序,等到你有大量的线程,然后用JConsole连接到应用程序,并查看线程的堆栈跟踪。要查看堆栈跟踪,请单击threads tab并单击活动线程下的一个线程。

+0

你说得对。我编辑了我的帖子。如果你有任何进一步的想法,让我知道。 – mibollma

+0

当你完成它们时,你是否在调用执行程序时调用shutdown? – sbridges

+0

这可能是问题所在,谢谢。出于好奇...是否有任何静态代码分析工具,会在这种情况下发出警告(类实例化,但从未调用的基本方法)? – mibollma