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

Java 获取I/art:显式并发标记扫描GC释放,java,android,android-service,Java,Android,Android Service,我正在启动一个service=>background服务,并开始检查“new Thread”中的文件,在下面的日志中,服务/应用被暂停 日志:I/art:显式并发标记扫描GC释放25935(1686KB)AllocSpace对象,13(903KB)LOS对象,39%空闲,13MB/22MB,暂停649us总计43.569ms 这只是扫描SD卡中MyData中的文件,其中包含一堆图片(大约20张图片) **Scan=获取图片名称并将其保存为字符串。这意味着垃圾收集器正在执行其工作并释放内存 如果

我正在启动一个service=>background服务,并开始检查“new Thread”中的文件,在下面的日志中,服务/应用被暂停

日志:
I/art:显式并发标记扫描GC释放25935(1686KB)AllocSpace对象,13(903KB)LOS对象,39%空闲,13MB/22MB,暂停649us总计43.569ms

这只是扫描SD卡中MyData中的文件,其中包含一堆图片(大约20张图片)


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

这意味着垃圾收集器正在执行其工作并释放内存

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

for (int i = 0; i < 100; i++) {
    Bitmap bmp = Bitmap.create(100, 100, Bitmap.Config.ARGB_4444);
}
for(int i=0;i<100;i++){
位图bmp=Bitmap.create(100100,Bitmap.Config.ARGB_4444);
}
每次我们点击这个循环,我们就分配一百个新的位图对象

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


谷歌发布了关于避免GC事件和正确管理内存的提示。

我遇到了一个应用程序的问题,这个应用程序连续工作了30次,代码没有任何变化。我只是看到一个灰色屏幕,它一直在做这个。Android studio是一个IDE,它与设备上运行的代码无关。听起来你有一个无限运行的循环。当我创建一个新的仿真器时,代码运行良好,然后在一段时间后,如果代码中当前没有循环,则开始执行。这是一个使用sqllite的基本便笺应用程序,在atm数据库中有3个便笺。由于某种原因,当我尝试在光标上迭代时,似乎会发生这种情况。你应该发布一个新问题,你认为是代码导致了问题。你有没有发现这个问题?我现在总是这样。我的应用程序将运行得非常好,但随后它将开始滞后。然后我回去检查我的代码,结果这个问题后来就消失了。它快把我逼疯了。它将从2秒的加载时间延长到一分钟以上。这是加载20个对象的结果