前言
测试反馈的日志中有大量的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触发的原因
- GC_MALLOC, 内存分配失败时触发
- GC_CONCURRENT,当分配的对象大小超过384K时触发
- GC_EXPLICIT,对垃圾收集的显式调用(System.gc)
- 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,这一行为单个时间值,表示垃圾收集的耗时时间。
参考文章
© 版权声明