获取I / art:显式并发标记扫描GC释放

时间:2016-02-11 14:03:10

标签: java android android-service

我正在开始服务=>后台服务,并开始检查"新线程"中的文件,在日志中我得到以下内容,服务/应用程序暂停。

记录:I/art: Explicit concurrent mark sweep GC freed 25935(1686KB) AllocSpace objects, 13(903KB) LOS objects, 39% free, 13MB/22MB, paused 649us total 43.569ms

它只扫描SD卡中MyData中的文件,其中包含一堆照片(约20张照片)。

**扫描=获取图片名称并将其保存为字符串。

1 个答案:

答案 0 :(得分:22)

所有这些意味着垃圾收集器正在完成其工作并释放内存。

如果您经常(或一致地)看到这一点,那么您可能会分配太多对象。一个常见原因是在循环中分配许多(或几个大)对象,如下所示:

for (int i = 0; i < 100; i++) {
    Bitmap bmp = Bitmap.create(100, 100, Bitmap.Config.ARGB_4444);
}

每次我们点击这个循环,我们都会分配一百个新的Bitmap对象。

防止GC扫描的最佳方法是不分配对象。当然,您必须使用Java分配对象,因此您需要确保不必要地分配。

Google已发布

Here is one of many YouTube videos,其中包含有关避免GC事件和正确管理内存的提示。