好吧,我知道有几个类似的问题,但我找不到关于 android 中 GC
的纯事实。
什么时候系统调用GC
?
Android 中的哪些 GC
算作不需要?
为什么 GC
会跳过位图?
显示我们如何绕过 GC
的代码示例? (对象 = 空?)
GC
对不需要的对象做了什么?
其他重要事实...
最佳答案
** 系统什么时候调用GC? Android 中的哪些 GC 算作不需要? **
在 Android 中至少有 5 种不同的方式调用垃圾收集器,其中一种是常见的,我知道当您查看 logcat
时,您总是会看到这一点
GC_CUNCURRENT
它是一个并发集合
,当堆开始填满时触发。
GC_FOR_MALLOC
当 GC_CURRENT
未能及时完成且堆已满且设备需要分配更多内存时调用,然后触发,直接执行垃圾收集。
GC_EXTERNAL_ALLOC
这仅在 HONEYCOMB 下面的 API
中调用,当您通过调用它的 recycle()
方法释放位图像素数据的内存时触发。
GC_HPROF_DUMP_HEAP
当您从 DDMS
创建一个 hprof 文件用于内存分析
或定位内存泄漏
.
GC_IMPLICIT
现在当您通过 System.gc()
调用垃圾收集器本身时会调用它,注意: 避免调用它并且您应该相信 垃圾收集器
。
为什么 GC 会跳过位图?
那是因为需要隐式调用Bitmap的recycle方法来调用垃圾回收器回收Bitmap的像素数据。 HONEY 及更高版本
中的每个位图都存储在 dalvik 堆
中。
GC 对不需要的对象做了什么?
只要对象在某个地方有引用
,它就不会被垃圾回收并导致内存泄漏,您可以使用DDMS检查您的应用程序的内存泄漏。
关于java - Android 垃圾收集器行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25195350/