漏洞LinkedBlockingQueue

时间:2017-06-15 15:24:06

标签: android firebase memory-leaks

我在我的应用程序中遇到了android的本机堆中的泄漏问题。泄漏似乎来自LinkedBlockingQueue,它只是在不被清理的情况下继续增长。

如果你看一下下面的内容,本机堆总共有478M并且它不断增长(它从20M开始,每隔几秒就会增长约250k)。 JVM堆正常工作并保持在100M左右的相同级别。我的应用程序使用自己的网络代码,但即使关闭它,应用程序只是“坐”那里仍然有这个泄漏。

我已经确定LinkedBlockingQueues指向com.android.okhttp.ConnectionPool实例(同一个)。我的代码中的任何地方都没有使用okhttp。我确实使用firebase配置,数据库和存储支持。但是除了附加侦听器的配置之外,其他服务并非在我测试时。

Console Log

下面的快照显示了我的Java堆转储。 LinkedBlockingQueue有6029个实例和几乎300M的保留内存。这个数字随着本机堆的增加而增长,所以我假设它们是相关的。

hpref classes

下面的快照显示了一个LinkedBlockingQueue $ Node实例,其中该项是连接池。它们看起来都一样,指向同一个项目。

hpref instance

我从未遇到类似的内存泄漏,也不确定是什么原因造成的。如果您有任何想法,或者您之前遇到类似问题,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

我明白了。这与我的app或firebase无关。似乎带有ADB集成的Android Studio可能就是原因。 当我禁用集成并使用Android设备监视器获取内存并获取日志时。本机堆不会增长并保持在相同的水平。