与日志一起陷入无限循环:背景部分/粘性并发标记扫描GC

时间:2018-06-07 15:35:59

标签: android memory-leaks garbage-collection leakcanary

我正在创建一个应用程序(在游戏商店中),它使用大量内存和Webview,并且通过使用LeakCanary,我发现了一个固定的几个小内存泄漏。有2个泄漏比其他泄漏更难修复,但也比其他泄漏小得多(每隔几个小时泄漏10-12kb),我不得不暂时离开它们。让我的应用程序运行一夜之后,我通常会回到大量的日志中这样:

  

后台部分并发标记扫描GC释放263432(17MB)AllocSpace对象,0(0B)LOS对象,26%空闲,44MB / 60MB,暂停13.441ms总计226.525ms

     

后台粘性并发标记扫描GC释放145187(13MB)AllocSpace对象,0(0B)LOS对象,22%免费,46MB / 60MB,暂停12.864ms总计164.097ms

     

后台部分并发标记扫描GC释放265421(17MB)AllocSpace对象,0(0B)LOS对象,26%空闲,44MB / 60MB,暂停13.632ms总计230.849ms

     

后台粘性并发标记扫描GC释放147514(14MB)AllocSpace对象,0(0B)LOS对象,22%免费,46MB / 60MB,暂停13.037ms总计167.625ms

这些日志每2秒重复一次,无休止地导致应用程序冻结,直到我杀死应用程序并重新开始。

在我的清单中,我添加了

android:largeHeap="true"

因为我的应用程序需要连续运行(基本上是永久性的),所以我每天早上凌晨1点实施警报以杀死应用程序并在干净的环境中重新启动。这不是一种最佳做法,但对于由于应用程序的使用寿命异常而导致的任何错误,它确实是一个很好的选择。

一个或两个小内存泄漏是否会造成这么大的损害?还有什么可能导致这些日志重复这么多?我该如何解决?

1 个答案:

答案 0 :(得分:0)

我认为这些日志在那里,因为实施了Canary Canary。禁用“泄漏金丝雀”,您将不再看到这些日志。