【发布时间】:2018-06-07 15:35:58
【问题描述】:
我正在使用 Webview 创建一个使用大量内存的应用程序(不会在 Play 商店中),通过使用 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 点设置了一个警报,以终止应用程序并在干净的环境中重新启动。这不是最佳做法,但它确实可以很好地解决由于应用程序异常长的生命周期而出现的任何错误。
一两个小的内存泄漏真的会造成这么大的损害吗?还有什么可能导致这些日志重复如此多?我该如何解决?
【问题讨论】:
-
曾经得到这个答案吗?
-
不。它仍在发生
标签: android memory-leaks garbage-collection leakcanary