首先,我想在这里粘贴一些 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 个问题。
我在 Google i/o 2011 看过视频“Android Memory Management”,但我仍然不清楚 5% 免费 7078K/7431K。这意味着我们在 7431K 堆大小中使用 7078K,但是这里的 7431K 是什么意思?因为我注意到7431K会是一个很大的数字。这个数字有什么规定吗?如果是指堆总大小,应该是16M或者32M之类的。但是这里显然不是..
Honeycomb 也有像
<Grow heap (frag case) to 7.391MB for 411152-byte allocation
这样的消息,Gingerbread 没有。这是什么意思?Honeycomb 及更高版本的 GC 日志消息不显示外部内存信息,如“external xxxK/xxxK”,这是为什么?
我还注意到,在 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/