Android Memory Debug 内存调试
在 Android 开发中经常看到 LogCat 日志上打印系统回收的东西,但是却又不知道什么意思,这篇博客就来讲讲这些调试信息的含义。
一般 Java 虚拟机要求支持 verbosegc 选项,输出详细的垃圾收集调试信息。dalvik 虚拟机很安静的接受 verbosegc 选项,然后什么都不做。dalvik 虚拟机使用自己的一套 LOG 机制来输出调试信息。
如果在 Linux 或者 Mac 下运行 adb logcat 命令,可以看到如下的输出:
D/dalvikvm(5809): GC_CONCURRENT freed 319K, 41% free 3465K/8453K, external 4703K/5261K, paused 7ms+18ms
其中 D/dalvikvm 表示由 dalvikvm 输出的调试信息,括号后的数字代表 dalvikvm 所在进程的 pid。
GC_CONCURRENT 表示触发垃圾收集的原因,有以下几种:
- GC_MALLOC, 内存分配失败时触发
- GC_CONCURRENT,当分配的对象大小超过 384K 时触发
- GC_EXPLICIT,对垃圾收集的显式调用(System.gc)
- GC_EXTERNAL_ALLOC,外部内存分配失败时触发
freed 319K:表示本次垃圾收集释放了 199K 的内存
41% free 3465K/8453K:其中 8453K 表示当前内存总量,3465K 表示可用内存,41%表示可用内存占总内存的比例
external 4703K/5261K:表示可用外部内存/外部内存总量
paused 7ms+18ms:garbage collection 总共花费了 (7 + 18) ms (启动花费时间+结束花费时间)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论