java - Android 垃圾收集器行为

标签 java android garbage-collection

好吧,我知道有几个类似的问题,但我找不到关于 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/

相关文章:

java - org.springframework.boot.web.support.不存在

Java 数字格式 - #.## - Windows 和 Linux

android - 如何将已编译的原生库动态加载到 Android 应用程序中?

android - Kotlin位置离我的位置很远我该如何使其更加准确

javascript - Bluebird promise 可以在完成之前进行GC吗?

java - 如何使用其他编程语言(C、C++等)的程序检查Java是否安装以及安装位置

java - 设置多个 SSL 套接字工厂

android - 用于移动 Web 应用程序的 Titanium 还是 PhoneGap?

c# - 多次调用 SuppressFinalize

java - 100%老一代——这是一个问题吗?