2017-06-15 33 views
0

我遇到了在我的應用程序中的Android本機堆泄漏問題。泄漏似乎來自LinkedBlockingQueue,它只是在不清理的情況下繼續增長。泄漏LinkedBlockingQueue

如果你看下面的表格,本地堆總共有478M,並且它不斷增長(它從20M開始,每隔幾秒就會增長大約25萬)。 JVM堆工作正常,並保持在100M左右的相同水平。我的應用程序使用自己的網絡代碼,但即使關閉它,應用程序「坐」在那裏仍然有這種泄漏。

我已經確定LinkedBlockingQueues指向com.android.okhttp.ConnectionPool實例(同一個)。我沒有在我的代碼中的任何地方使用okhttp。我確實使用配置,數據庫和存儲支持的firebase。但是除了配置了監聽器的配置外,其他服務不在我測試的時候。下面

Console Log

快照顯示了我的Java堆轉儲。 LinkedBlockingQueue有6029個實例和將近300M的保留內存。這個數字隨着本地堆增長而增長,所以我假設它們是相關的。

hpref classes

下面的快照顯示的LinkedBlockingQueue $節點實例處的項目是連接池之一。他們看起來都一樣,指向同一個項目。

hpref instance

我從來沒有遇到過內存泄漏這樣的,不知道是什麼原因呢。如果您有任何想法,或者您之前有過這樣的問題,我將不勝感激。

回答

0

我想通了。這與我的應用或Firebase無關。似乎Android Studio與ADB集成可能是原因。 當我禁用集成並使用Android設備監視器獲取內存並獲取日誌時。本地堆不會增長並停留在相同的級別。