Android内存分析总结
来源:互联网 发布:程序员逆袭之路苍非蓝 编辑:程序博客网 时间:2024/05/26 12:02
转载地址:http://my.oschina.net/shaorongjie/blog/170663
前一段时间陆陆续续写了一下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上。
- Android内存分析总结
- Android内存分析总结
- Android内存分析总结
- Android内存泄漏分析总结
- 【Android】MAT分析内存状态总结
- Android内存泄漏分析与总结
- Android 内存泄漏案例分析总结(Handler)
- Android 内存泄漏案例分析总结(Handler)
- Android OOM:内存管理分析和内存泄露原因总结
- 内存分析优化总结
- java内存分析总结
- iOS内存分析总结
- 内存溢出分析总结
- 使用MAT分析android项目内存泄露总结
- Android开发-Handler引起的内存泄漏-实验、分析、总结。
- Android开发-Handler引起的内存泄漏-实验、分析、总结。
- Android中使用Handler造成内存泄露的分析总结
- Android 面试总结 Handler内存泄漏分析及解决
- 小波与滤波器组(3)
- Socket Tcp Http 之间的关系
- 英特尔cpu 系统结构简要介绍
- MySQL性能优化的最佳20+条经验
- Codec Engine 安装和设置
- Android内存分析总结
- VirtualBox 创建com对象失败的解决方法
- AutoMapper----Custom Type converters
- ubuntu14.01 搭建交叉编译环境arm-linux-gcc 4.3.2
- php源码编译安装
- 回型矩阵
- javascript学习心得
- List 与iteraor区别
- 图解SQL的Join