我正在启动服务 => 后台服务,并开始检查“新线程”中的文件,在日志中我得到以下内容,服务/应用程序暂停。
日志:I/art:显式并发标记清除 GC 释放了 25935(1686KB) 个 AllocSpace 对象,13(903KB) 个 LOS 对象,39% 空闲,13MB/22MB,暂停 649us,共 43.569ms
只是对SDcard中MyData中的文件进行扫描,其中包含一堆图片(约20张)。
**Scan = 获取图片名称并将它们保存到 String 中。
最佳答案
这意味着垃圾收集器正在执行其工作并释放内存。
如果您经常(或始终)看到这种情况,那么您可能分配了太多对象。一个常见的原因是在循环中分配许多(或一些大的)对象,如下所示:
for (int i = 0; i < 100; i++) {
Bitmap bmp = Bitmap.create(100, 100, Bitmap.Config.ARGB_4444);
}
每次执行此循环时,我们都会分配一百个新的 Bitmap 对象。
防止 GC 扫描的最佳方法是不分配对象。当然,您必须在 Java 中分配对象,因此您需要确保没有进行不必要的分配。
Here is one of many YouTube videos Google 发布了有关避免 GC 事件和正确管理内存的提示。
关于java - 获取 I/art : Explicit concurrent mark sweep GC freed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35341435/