前言

测试反馈的日志中有大量的dalvikvm,如下:

D/dalvikvm(  723): GC_CONCURRENT freed 658K, 38% free 1168K/1876K, paused 1ms+1ms, total 11ms
D/dalvikvm(  526): GC_FOR_ALLOC freed 87K, 2% free 7449K/7580K, paused 8ms, total 8ms
D/dalvikvm(  364): GC_EXPLICIT freed 109K, 16% free 5132K/6068K, paused 4ms+6ms, total 77ms

由于对这个不是很了解,因此查阅网上文章。

以下内容摘抄于网络。

正文

一般Java虚拟机要求支持verbosegc选项,输出详细的垃圾收集调试信息。

GC触发的原因

  1. GC_MALLOC, 内存分配失败时触发
  2. GC_CONCURRENT,当分配的对象大小超过384K时触发
  3. GC_EXPLICIT,对垃圾收集的显式调用(System.gc)
  4. GC_EXTERNAL_ALLOC,外部内存分配失败时触发

GC日志分析

以下面的GC日志分析

D/dalvikvm(  723): GC_CONCURRENT freed 658K, 38% free 1168K/1876K, paused 1ms+1ms, total 11ms
D/dalvikvm

表示由dalvikvm输出的调试信息,括号后的数字代表dalvikvm所在进程的pid。

GC_CONCURRENT

是触发GC的原因。

freed 658K

表示本次垃圾收集释放了658K的内存。

38% free 1168K/1876K

38% 表示可用内存占总内存的比例

1876K 表示当前内存总量

1168K 表示可用内存

paused 1ms+1ms

第一个时间值表示markrootset的时间

第二个时间值表示第二次mark的时间

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

参考文章

  1. 内存调试的东西D/dalvikvm( 809 ): GC_CONCURRENT freed

相关文章

暂无评论

none
暂无评论...