好的,我知道有一些类似的问题,但我在android中找不到关于GC
的纯粹事实。
系统调用时GC
?
android中的GC
计为不需要的内容?
为什么GC
会跳过位图?
示例我们如何绕过GC
的代码示例? (Object = null?)
GC
对不需要的对象做了什么?
其他重要事实......
答案 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来检查应用程序的内存泄漏。