/文章

[摘]Android GC日志简单分析

文章目录

前言

测试反馈的日志中有大量的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

猜你喜欢

前言 最近因为一个紧急的项目,客户要求摘他另外一个客户的样机,为了赶进度,我们通过反编译样机中的应用,获取UI和布局等。 但,做出来后,效果总感觉有些不一样,比如显示的字体大小。 最后发现,我们调试的样机分辨率虽然跟样机一样,但密度不一样。…
发表评论