android - Android GC 日志消息的含义

标签 android garbage-collection android-4.0-ice-cream-sandwich android-3.0-honeycomb android-logcat

首先,我想在这里粘贴一些 Honeycomb 的 GC 日志消息。

03-08 01:31:54.354: D/dalvikvm(258): GC_CONCURRENT freed 196K, 5% free 7078K/7431K, paused 3ms+3ms
03-08 01:31:54.494: D/dalvikvm(258): GC_FOR_ALLOC freed 4K, 5% free 7073K/7431K, paused 75ms
03-08 01:31:54.494: I/dalvikvm-heap(258): Grow heap (frag case) to 7.391MB for 411152-byte allocation

我在这里有 4 个问题。

  1. 我在 Google i/o 2011 看过视频“Android Memory Management”,但我仍然不清楚 5% 免费 7078K/7431K。这意味着我们在 7431K 堆大小中使用 7078K,但是这里的 7431K 是什么意思?因为我注意到7431K会是一个很大的数字。这个数字有什么规定吗?如果是指堆总大小,应该是16M或者32M之类的。但是这里显然不是..

  2. Honeycomb 也有像 Grow heap (frag case) to 7.391MB for 411152-byte allocation 这样的消息,Gingerbread 没有。这是什么意思?

    <
  3. Honeycomb 及更高版本的 GC 日志消息不显示外部内存信息,如“external xxxK/xxxK”,这是为什么?

  4. 我还注意到,在 ICS 和更高版本中,GC 日志消息也有一个总时间,如 GC_FOR_ALLOC freed 190K, 13% free 5409K/6164K, paused 67ms, total 71ms,但是这里alloc gc的total time大于paused time,有时你会发现total time会比paused time大很多。为什么?

最佳答案

关于第 3 点(关于外部内存信息),可能是因为位图现在是 Dalvik 内存的一部分而不是外部内存,因此外部内存与垃圾收集器的相关性很小。

关于android - Android GC 日志消息的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15285750/

相关文章:

java - Android - Activity 行为?

javascript - 在javascript函数和内存管理中声明vars

java - 关于在 Java 中关闭垃圾收集器

c - 垃圾收集不是为 C 设计的,是否有特定原因?

java - App 在 Android 4.0 上崩溃,但在 2.3 上不崩溃——奇怪的异常

android - 没有这样的方法 getITelephony 断开调用

android - 在 Android list 中添加方向不起作用 [React-Native]

java - 无法使用 DOM 从 XML 结果中解析元素

android - 当我尝试在设备上安装已编译的 .apk 时,INSTALL_FAILED_UPDATE_INCOMPATIBLE

android - 请求失败,服务器响应 DUPLICATE_REQUEST_ID