D/dalvikvm: <GC_Reason> <Amount_freed>, <Heap_stats>, <External_memory_stats>, <Pause_time>
<回收原因><回收内存总数><可用内存百分比><外部内存状态><回收占用时间>
<GC_Reason> : GC触发原因
- GC_CONCURRENT:当已分配内存比例达到某一值时,自动触发GC;
- GC_FOR_MALLOC:分配内存空间(如创建对象)时,内存不足以分配时触发。系统会杀死应用进程并且回收所有内存。
- GC_HPROF_DUMP_HEAP: 当请求创建HPROF文件来分析堆内存时触发的GC;
- GC_EXPLICIT:当显式调用GC时,例如调用System.gc()或者通过DDMS工具显式地告诉系统进行GC操作等;
- GC_EXTERNAL_ALLOC: 在API版本10(Android3.0)以下的时候的垃圾回收机制。3.0以上版本所有的内存都在Dalvik堆中分配。它是用来回收dalvik虚拟机以外的内存(例如Bitmap中的内存或者NIObuffer中的内存)。
<Amount_freed> : 本次回收内存的大小;
<Heap_stats>:可用内存百分比(49% free) 已用内存/堆上总内存(1132K/2208K);
<External_memory_stats> 外部内存的统计信息:
系统API版本10以下的系统中,Dalvik虚拟机堆外分配的内存 / 限制的内存量
<Pause_time> 本次GC操作导致应用程序暂停的时长(开始和结束各一次)。
关于这个暂停的时间,在2.3之前GC操作是不能并发进行的,也就是系统正在进行GC,那么应用程序就只能阻塞住等待GC结束。而自2.3之后,GC操作改成了并发的方式进行,就是说GC的过程中不会影响到应用程序的正常运行,但是在GC操作的开始和结束的时候会短暂阻塞一段时间。
如果触发原因不是GC_CONCURRENT,这一行为单个时间值,表示垃圾收集的耗时时间。