GC可能会在不定的时间出发,你几乎无法控制它发生的时机。有时可以通过System.gc()提醒一下android,但最终还是由虚拟机决定。一下5种情况会触发垃圾收集,并可以参考logcat中输出的信息。
GC_FOR_MALLOC:发生在堆被占满不能进行内存分配时,在分配新对象之前必须进行内存回收;
GC_CONCURRENT:发生在(可能是部分)垃圾可供回收时,通常很多对象可以回收;
GC_EXPLICIT:显示调用System.gc()产生的垃圾收集;
GC_EXTERNAL_ALLOC:Honeycomb以及以上版本不会出现;
GC_HPROF_DUMP_HEAP:发生在创建HPROF文件时。
比如下面log信息就是发生在垃圾可供回收时:
01-07 17:06:03.840: D/dalvikvm(405): GC_CONCURRENT freed 793K, 8% free 10339K/11207K, paused 2ms+2ms