Android内存分析

说明

  • GC_FOR_MALLOC

    发生在堆被占满不能进行内存分配时,在分配新对象之前必须进行内存回收

  • GC_CONCURRENT

    发生在(可能是部分的)垃圾可够回收时,通常有很多对象可以回收

  • GC_EXTERNAL_ALLOC

    在Android3.0 (Honeycomb)以前,释放通过外部内存(externel memory, 通过JNI代码中malloc分配得到的内存)时产 生。Android3.0和更高版本中不再有这种类型的内存分配了。

  • GC_EXPLICIT

    显示调用System.gc产生的垃圾收集

  • GC_HPROF_DUMP_HEAP

    发生在创建HPROF文件时

实例分析

08-07 17:45:40.373: D/dalvikvm(5783): GC_CONCURRENT freed 2349K, 65% free 3246K/9551K, external 4703K/5261K, paused 2ms+2ms, total 5ms

  • freed 2349K

    说明释放了多少内存.

  • 65% free 3246K/9551K

    65%表示目前可分配内存占比例,3426K表示当前活动对象所占内存,9551K表示堆大小

  • external 4703K/5261K

    indicates external memory allocation, how much external memory the app has allocated and the soft limit of allocation.说明外部内存的分配,已经分配了多少以及能够分配的上限。

  • paused 2ms+2ms

    第一个时间值表示markrootset的时间,第二个时间值表示第二次mark的时间。如果触发原因不是GC_CONCURRENT,这一 行为单个时间值,表示垃圾收集的耗时时间。

  • total 5ms

    GC总耗时

命令行查看数据

  • adb shell
  • ps | grep xxx.xxx 获取pid
  • dumpsys meminfo

参考资料