打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Android内存分析总结

前一段时间陆陆续续写了一下Android内存Debug的一些手段,现在整理一下,在这边提供一个链接,也做一下简单的总结。


VSS,RSS,PSS,USS

查看进程的内存使用情况

使用meminfo分析Android单个进程内存信息

使用showmap分析android进程内存占用情况

使用MAT分析Java内存

Android native Memory分析

1.一般来说,分析系统的内存情况可以用adb shell dumpsys meminfo查看当时的系统内存状况。接着可以使用《VSS,RSS,PSS,USS》一文中提到的adb shell procrank打出每个进程的内存分配情况。然后看哪个进程占用的内存不合理(一般是最大的或者紧接着的几个),找出这个进程来分析。

2.分析单个进程的时候可以adb shell dumpsys meminfo -a <processname>/<processid>查看内存大体状况。具体的内存分配情况则需要用adb shell showmap <pid> 来看是哪个部分占用的比较多,或者抓一个正常和一个异常的进行对比看哪部分上升最快。(因为占用最多的也许是比较合理的)或者找到抓取process show map在每个时间的值, 编写脚本用图形化方式看哪部分上升最快。

3.如果是/dev/ashemem/dalvik-heap(deleted)占用的比较大,则是Java部分的Memory Leak, 可以使用adb shell am dumpheap <processname> /sdcard/<FileName>文件。然后再adb pull /sdcard/<FileName> .这个文件。将这个文件放在\android-sdk\tools目录下,在命令行(dos/linux terminal)中执行hprof-conv.exe <FileName> <newFileName>.hprof文件。这里需要转换的原因是因为Android的虚拟机dalvik和Java的虚拟机(HotSpot等)有点不同,需要转换成相应的格式。然后参考《使用MAT分析Java内存》一文分析Java Memory分配即可。也可以直接用《使用MAT分析Java内存》使用图形界面点击按钮直接分析。

4.至于其他的,大部分属于native的Memory leak了。可以用linux malloc debug的机制来分析。后面我再做总结,更新在这篇文章后。这边有个简单的文档供参考(但不是我写的)http://blog.csdn.net/elfylin/article/details/7902019

5.今天补充了一下native memory分析的办法,但此办法要求很多,也许只对做ROM的有所帮助,具体办法见

《Android native memory分析》

其实从上面可以看出来,Android的内存分析基本上是结合Linux和Java的内存分析工具,再加上Android提供的一些转化工具就可以分析了。VSS,USS,PSS,USS,showmap, malloc debug等都是Linux本来就有的。MAT和Hprof本身是Eclipse和Java原来就有的,只是需要转换一下。说这些的目的是想说如果Linux或者Java上的一些Debug手段也基本上可以用在Android上。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Android APP性能及专项测试(个人整理)
android app内存使用限制
Android 开发者选项详述
解决Android C 代码的内存泄漏一个重要的原则
Android软件测试的日志文件抓取简介
android调试工具集
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服