本文转自:http://droidyue.com/blog/2014/11/08/understanding-garbage-collection-output-messages-in-android/android
感谢做者的翻译!!!google
若是你是一名Android开发者而且经常看程序日志的话,那么下面的这些信息对你来讲可能一点都不陌生。spa
GC_CONCURRENT freed 178K, 41% free 3673K/6151K, external 0K/0K, paused 2ms+2ms
GC_EXPLICIT freed 6K, 41% free 3667K/6151K, external 0K/0K, paused 29ms
GC_CONCURRENT freed 379K, 42% free 3856K/6535K, external 0K/0K, paused 2ms+3ms
GC_EXPLICIT freed 144K, 41% free 3898K/6535K, external 0K/0K, paused 32ms
GC_CONCURRENT freed 334K, 40% free 4091K/6727K, external 0K/0K, paused 2ms+3ms
可是这些究竟是什么,又有什么含义呢?线程
上面的这几行就是Android系统垃圾回收的部分输出信息。每当垃圾回收被触发的时候,你就能够经过logcat查看到这样的信息。这样短短的一行的日志有着很大的信息量。好比经过日志咱们能够发现程序可能有内存(泄露)问题。本文将具体介绍这些日志信息的每一部分的含义来帮助帮助你们更好地了解垃圾回收的运行状况。翻译
GC_CONCURRENT freed 178K, 41% free 3673K/6151K, external 0K/0K, paused 2ms+2ms
GC_EXPLICIT freed 6K, 41% free 3667K/6151K, external 0K/0K, paused 29ms日志
红颜色标出的部分就是垃圾回收触发的缘由。在Android中有五种类型的垃圾回收触发缘由。code
GC_CONCURRENT freed 178K, 41% free 3673K/6151K, external 0K/0K, paused 2ms+2ms
GC_EXPLICIT freed 6K, 41% free 3667K/6151K, external 0K/0K, paused 29ms对象
这部分数据告诉咱们JVM进行垃圾回收释放了多少空间。blog
GC_CONCURRENT freed 178K, 41% free 3673K/6151K, external 0K/0K, paused 2ms+2ms
GC_EXPLICIT freed 6K, 41% free 3667K/6151K, external 0K/0K, paused 29ms内存
这部分告诉咱们堆内存中可用内存占的比例,当前活跃的对象总的空间,以及当前堆的总大小。因此这里的数据就是41%的堆内存可用,已经使用了3673K,总的堆内存大小为6151K。
GC_EXTERNAL_ALLOC freed 1125K, 47% free 6310K/11847K, external 1051K/1103K, paused 46ms
GC_EXTERNAL_ALLOC freed 295K, 47% free 6335K/11847K, external 1613K/1651K, paused 41ms
这部分数据告诉咱们外部存储(位于机器内存)对象的数据。在2.3以前,bitmap对象存放在机器内存。所以在第一条数据中咱们能够看到以有1051K使用,外部存储为1103K。
上面两行数据相差100毫秒,咱们能够看到第一条数据代表外部存储快满了,因为GC_EXTERNAL_ALLOC被触发,外部存储空间扩大到了1651K。
GC_CONCURRENT freed 178K, 41% free 3673K/6151K, external 0K/0K,paused 2ms+2ms
GC_EXPLICIT freed 6K, 41% free 3667K/6151K, external 0K/0K, paused 29ms
这部分数据代表垃圾回收消耗的时间。在GC_CONCURRENT回收时,你会发现两个暂停时间。一个是在回收开始的暂停时间,另外一个时在回收结束的暂停时间。GC_CONCURRENT从2.3开始引入,相比以前的程序所有暂停的垃圾回收机制,它的暂停时间要小的多。通常少于5毫秒。由于GC_CONCURRENT的绝大多数操做在一个单独的线程中进行。
本文中内容摘自 Google I/O 2011: Memory management for Android Apps,若是感兴趣,请访问这里了解更多。
https://sites.google.com/site/pyximanew/blog/androidunderstandingddmslogcatmemoryoutputmessages