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上。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值