2011-08-27 64 views
0

我的內存泄漏看起來是這樣的: leak獲取對特定存儲更多細節泄露

有與Eclipse Memory Analyzer沒有那麼多經驗,我不知道是否能回答這兩個問題:

  • 有什麼源代碼位置,其中大部分實例是分配的?
  • 他們沒有收集垃圾的原因是什麼?
    1. 他們停止了,但仍然在某處被引用?
    2. 他們仍在執行或睡眠?

編輯:看起來sbridges是正確的,我只是線程永遠不死。然而,我不確定這個原因,因爲stacktrace似乎沒有包含我的任何代碼。我使用ExecutorService的方式肯定是錯的。

threads

回答

3

某處你的代碼創建線程,這些線程永遠不死。線程不能被垃圾收集,因爲一個線程是一個gc根。調試這個最簡單的方法是啓動應用程序,等到你有大量的線程,然後用JConsole連接到應用程序,並查看線程的堆棧跟蹤。要查看堆棧跟蹤,請單擊threads tab並單擊活動線程下的一個線程。

+0

你說得對。我編輯了我的帖子。如果你有任何進一步的想法,讓我知道。 – mibollma

+0

當你完成它們時,你是否在調用執行程序時調用shutdown? – sbridges

+0

這可能是問題所在,謝謝。出於好奇...是否有任何靜態代碼分析工具,會在這種情況下發出警告(類實例化,但從未調用的基本方法)? – mibollma