强制更多GC_FOR_ALLOC

时间:2014-02-12 22:45:01

标签: memory heap

我正在为我的游戏回收大型位图文件,希望避免内存不足错误。但是,无论我回收多少位图,系统似乎都没有使内存可用于新的位图分配。它似乎总是在同一时间崩溃,好像我没有回收任何东西。我正在使用system.gc在每个循环命令后强制进行垃圾收集,但它似乎没有什么区别。 view.getResources()。flushLayoutCache();或view.destroyDrawingCache();。

这是崩溃前的日志:

02-12 16:24:45.006:D / dalvikvm(1627):GC_EXPLICIT释放3113K,20%免费25450K / 31751K,暂停77ms + 47ms
02-12 16:24:45.006:D / MainGamePanel(1627):system.gc叫做

02-12 16:24:46.966:D / dalvikvm(1627):GC_CONCURRENT释放< 1K,14%free 27403K / 31751K,暂停35ms + 140ms

02-12 16:24:52.975:D / dalvikvm(1627):GC_CONCURRENT释放2546K,16%免费26871K / 31751K,暂停60ms + 91ms

02-12 16:25:35.253:D / dalvikvm(1627):GC_CONCURRENT释放1742K,15%免费27138K / 31751K,暂停51ms + 44ms

02-12 16:26:38.351:D / dalvikvm(1627):GC_CONCURRENT释放1923K,15%释放27226K / 31751K,暂停87ms + 69ms

02-12 16:28:03.941:D / dalvikvm(1627):GC_CONCURRENT释放3577K,20%免费25696K / 31751K,暂停26ms + 57ms

02-12 16:28:08.879:D / Datapool(1627):回收称为

02-12 16:28:10.356:D / dalvikvm(1627):GC_EXPLICIT释放934K,20%免费25578K / 31751K,暂停73ms + 73ms

02-12 16:28:10.356:D / Datapool(1627):system.gc叫做

02-12 16:28:12.356:D / dalvikvm(1627):GC_EXPLICIT释放732K,22%免费24845K / 31751K,暂停60ms + 66ms

02-12 16:28:12.356:D / Datapool(1627):system.gc叫做

02-12 16:28:13.536:D / dalvikvm(1627):GC_FOR_ALLOC释放85K,23%免费24760K / 31751K,暂停1128ms

02-12 16:28:13.756:I / dalvikvm-heap(1627):将堆(frag case)增长到26.915MB,用于2797584字节分配

02-12 16:28:15.486:D / dalvikvm(1627):GC_CONCURRENT释放0K,14%免费27492K / 31751K,暂停79ms + 114ms

02-12 16:28:17.428:D / dalvikvm(1627):GC_FOR_ALLOC释放0K,14%免费27492K / 31751K,暂停649ms

02-12 16:28:17.428:I / dalvikvm-heap(1627):强制收集124.276字节分配的SoftReferences

02-12 16:28:18.715:D / dalvikvm(1627):GC_BEFORE_OOM释放0K,14%免费27492K / 31751K,暂停1276ms

02-12 16:28:18.715:E / dalvikvm-heap(1627):1243076字节分配内存不足。

1 个答案:

答案 0 :(得分:1)

如果可能,您可以尝试更改dalvikVM实现的gc算法。 但我认为这不是一种选择。 dalvik实现了标记和扫描

我似乎有一些关于图像问题的线索。

一个片段引起了我的注意:

在图片取消引用

后立即尝试此操作
 bitmap.recycle();
    System.gc();
    Runtime.getRuntime().gc(); 

这个线程非常完善图像管理。

Strange out of memory issue while loading an image to a Bitmap object