java - 获取 I/art : Explicit concurrent mark sweep GC freed

标签 java android android-service

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

日志: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/

相关文章:

java - 是否可以使用 org.codehaus.mojo :build-helper-maven-plugin to bundle native dlls into a war file?

Java应用程序读取WiFi信号和SSID?

android - 设备可以在前台服务之前休眠吗?

android - 如果应用程序在后台运行,则丢失网络 android 6 及更高版本

安卓 L (API 21) - java.lang.IllegalArgumentException : Service Intent must be explicit

Java 从 xml 递归读取节点仅返回 #text 节点

java - Model对象的抽象合理吗?

java - 无法从互联网检索数据

java - newboston Android开发教程-显示列表菜单

java - Android Proguard - 一步一步