android - Android Logcat 中的 GC_FOR_MALLOC、GC_EXPLICIT 和其他 GC_* 是什么意思?

标签 android garbage-collection logcat

如果您查看 Android 日志,您可能会看到很多此类内容。

它们是什么意思,知道这些可能有助于我们更好地分配内存。

例子:

 28470               dalvikvm  D  GC_FOR_MALLOC freed 665 objects / 239992 bytes in 71ms
 28470               dalvikvm  D  GC_FOR_MALLOC freed 673 objects / 240288 bytes in 87ms
 21940               dalvikvm  D  GC_EXPLICIT freed 4802 objects / 185320 bytes in 78ms
 28470               dalvikvm  D  GC_FOR_MALLOC freed 666 objects / 240536 bytes in 63ms

最佳答案

GC_FOR_MALLOC 表示由于堆上没有足够的内存来执行分配而触发了 GC。可能会在创建新对象时触发。

GC_EXPLICIT 表示垃圾收集器已被明确要求收集,而不是由堆中的高水位标记触发。到处都会发生,但最有可能发生在线程被杀死或绑定(bind)通信被取消时。

还有一些其他的:

GC_CONCURRENT当堆达到一定数量的要收集的对象时触发。

GC_EXTERNAL_ALLOC 表示 VM 正在尝试减少用于可收集对象的内存量,以便为更多不可收集对象腾出空间。

更新:在更高版本的 Android 中更改了第一个事件的名称。它现在称为“GC_FOR_ALLOC”。 还有一个可用的新事件,尽管在现代手机中非常罕见: GC_BEFORE_OOM 表示系统运行时内存非常低,并且执行了最终 GC,以避免调用低内存 killer 。

关于android - Android Logcat 中的 GC_FOR_MALLOC、GC_EXPLICIT 和其他 GC_* 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4976566/

相关文章:

java - 如何在位图 Java 中创建文本周围的轮廓

flash - 从浏览器卸载时清理 as3 flash 应用程序

Java 8 : CMS does not kick on for old generation even though CMSInitiatingOccupancyFraction specified

android - 如何说服 Logcat 只打印有值(value)的数据,并防止吐出无用的垃圾日志

android - 使用 Google 登录 Android 获取用户的出生日期和性别

android - FusedLocationProviderClient 在 Android Pie 9.0 中返回错误的经纬度

java - 在触摸监听器中执行工作,然后将其委托(delegate)给前一个监听器

VB.Net Office 互操作 - Excel 进程未关闭

java - 金鱼地址空间主机内存分配器 : ioctl_ping failed

android - grep adb logcat 并将输出写入文本文件