安卓日志 'GC_EXTERNAL_ALLOC' 'GC_FOR_MALLOC'

标签 android logging

在运行我的应用程序时,我得到了这样的日志:

GC_EXTERNAL_ALLOC freed 2K, 38% free 8772K/14087K, external 17480K/17998K, paused 87ms
GC_FOR_MALLOC freed 0K, 38% free 8772K/14087K, external 17480K/17998K, paused 67ms
GC_CONCURRENT freed 2125K, 47% free 6214K/11719K, external 7142K/8400K, paused 3ms+5ms

有人知道这些日志是什么意思吗?提前致谢!

  1. “GC_EXTERNAL_ALLOC”、“GC_FOR_MALLOC”和“GC_CONCURRENT”有什么区别。还有其他一些“GC”事件吗?
  2. “38% 免费 8772K/14087K”是什么意思?什么是“8772K”,什么是“14087K”?
  3. “外部 17480K/17998K”是什么意思?什么是“17480K”,什么是“17998K”?

谢谢!

最佳答案

另一个解释 Dalvik 垃圾收集器消息的地方是这个视频:Google I/O 2011: Memory management for Android Apps

在演示开始大约 14 分钟时,他分解了消息格式。 (顺便说一句,该视频在调试内存泄漏方面提供了非常好的信息)

大致的格式是[Reason][Amount Freed],[Heap Statistics],[External Memory Statistics],[Pause Time]

原因

Viktor/Robert 已经解释了 GC_CONCURRENTGC_FOR_MALLOCGC_EXTERNAL_ALLOC

还有:

  • GC_HPROF_DUMP_HEAP - 如果您通过单击 DDMS 中的“转储堆”按钮或以编程方式转储堆

  • GC_EXPLICIT - 如果你调用 System.gc()

释放量

例如释放 2125K

不言自明

堆统计

例如47% 免费 6214K/11719K

这些数字反射(reflect)了 GC 运行后的情况。 “47% free”和 6214K 反射(reflect)了当前的堆使用情况。 11719K 代表总堆大小。据我所知,堆可以增长/缩小,因此如果达到此限制,您不一定会遇到 OutOfMemoryError。

外存统计

例如外部7142K/8400K

注意:这可能仅存在于 Honeycomb 之前的 Android 版本(3.0 之前)中。

在 Honeycomb 之前,位图分配给您的 VM 外部(例如,Bitmap.createBitmap() 在外部分配位图并且只在本地堆上分配几十个字节)。外部分配的其他示例是 java.nio.ByteBuffers。

暂停时间

如果是并发GC事件,会列出两次。一种是在 GC 之前暂停,一种是在 GC 大部分完成时暂停。 例如。 暂停 3ms+5ms

对于非并发 GC 事件,只有一个暂停时间,而且通常要大得多。 例如。 暂停 87 毫秒

关于安卓日志 'GC_EXTERNAL_ALLOC' 'GC_FOR_MALLOC',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4550757/

相关文章:

android - 动画 View 作为连续页面

java - 是否允许在 Android 公开版本上进行任何登录?

安卓工作室错误 : Adb refused a command

android - 运行 Android Lint 遇到了...失败。 java.lang.NullPointerException异常

python - 测试时如何查看 Airflow 运算符(operator)的日志

javascript - 无法理解 meteor 中的 MUP 错误

java - MySQL或Tomcat日志查询

java - 带有干扰器的 log4j2 配置

android - 访问仪器测试资源

java - 将Unity3D游戏集成到 native Android应用中