当垃圾回收机在进行垃圾回收之后.会在Logcat中作相对于的输出. 所以我们也可以通过这些信息来判断是否存在内存泄露问题
一,上面消息的第一个部分产生GC的原因,一共有四种类型
- GC_CONCURRENT 当你的堆内存快被用完的时候,就会触发这个GC回收
- GC_FOR_MALLOC 堆内存已经满了,同时又要试图分配新的内存,所以系统要回收内存
- GC_EXTERNAL_ALLOC 在Android3.0 (Honeycomb)以前,释放通过外部内存(比如在2.3以前,产生的Bitmap对象存储在Native Memory中)时产生.Android3.0和更高版本中不再有这种类型的内存分配了.
- GC_EXPLICIT 调用System.gc时产生,上图中就是点击Cause GC按钮手动触发垃圾回收器产生的log信息
freed 1413K表示GC释放了1413K的内存
20% free 9349K/11644K
20%表示目前可分配内存占的比例 9349K表示当前活动对象所占内存 11644K表示Heap的大小
paused 8ms + 3ms, total 71ms 则表示触发GC应用暂停的时间和GC总共消耗的时间
有了这些log信息就可以知道GC运行几次以后有没有成功释放出一些内存. 如果分配出去的内存在持续增加.那么很明显存在内存泄露. 如下存在内存泄露的Log信息 很明显Heap中空闲内存占总Heap的比例在缩小.Heap中活动对象所占的内存在增加.