Android垃圾收集器行为

时间:2014-08-08 02:46:17

标签: java android garbage-collection

好的,我知道有一些类似的问题,但我在android中找不到关于GC的纯粹事实。

系统调用时GC

android中的GC计为不需要的内容?

为什么GC会跳过位图?

示例我们如何绕过GC的代码示例? (Object = null?)

GC对不需要的对象做了什么?

其他重要事实......

1 个答案:

答案 0 :(得分:2)

**系统调用GC时? android中的哪些GC算不需要? **

至少有5种不同的方式在android中调用垃圾收集器的一种常见方式,我知道当你看到logcat

时你总会看到这个
GC_CUNCURRENT

当堆开始填满时会触发concurrent collection

GC_FOR_MALLOC

GC_CUNCURRENT无法及时完成并且堆已满并且设备需要分配更多内存然后触发此操作时调用它,直接执行垃圾收集。

GC_EXTERNAL_ALLOC

这只在API below HONEYCOMB中调用,当你通过调用它的recycle()方法将内存释放到Bitmap像素数据时会触发它。

GC_HPROF_DUMP_HEAP

当您从DDMS memory analyzation创建 hprof 文件或找到memory leak时,会调用此方法。

GC_IMPLICIT

现在当你通过System.gc()调用垃圾收集器时调用它,注意:避免调用它,你应该信任garbage collector

为什么GC会跳过位图?

这是因为您需要隐式调用Bitmap的循环方法来调用垃圾收集器来回收它的位图像素数据。 HONEY and above中的每个位图都存储在dalvik heap

GC对不需要的对象做了什么?

只要对象在某处有reference,它就不会被垃圾收集并导致内存泄漏,您可以使用DDMS来检查应用程序的内存泄漏。