我正在开始服务=>后台服务,并开始检查"新线程"中的文件,在日志中我得到以下内容,服务/应用程序暂停。
记录: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张照片)。
**扫描=获取图片名称并将其保存为字符串。
答案 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事件和正确管理内存的提示。