首先,我想在这里粘贴一些用于蜂巢的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
我有四个问题。
我看过谷歌2011年i/o中的视频“Android Memory Management”,但我仍然不清楚5%的免费7078k/7431k。这意味着我们在7431k堆大小中使用7078k,但7431k在这里是什么意思?因为我注意到7431K将是一个很大的数字。这个号码有保险吗?如果它意味着堆的总大小,它应该是16m或32m或类似的东西。但这里显然不是。
Honeycomb也有类似于
Grow heap (frag case) to 7.391MB for 411152-byte allocation
的消息,姜饼没有这个消息。这是什么意思?Honeycomb和更高版本中的GC日志消息不显示“External xxxk/xxxk”之类的外部内存信息,为什么?
我还注意到,在ics和更高版本中,gc日志消息的总时间也类似于
GC_FOR_ALLOC freed 190K, 13% free 5409K/6164K, paused 67ms, total 71ms
,但这里alloc gc的总时间大于暂停时间,有时您会注意到总时间将远远大于暂停时间。为什么? 最佳答案
在第3点(关于外部内存信息),可能是因为位图是dalvik内存的一部分,而不是现在的外部内存,因此外部内存与垃圾收集器的相关性很小。