2017-06-15 36 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设备监视器获取内存并获取日志时。本地堆不会增长并停留在相同的级别。