在开发应用过程中,我们可以使用现成的工具来查看内存泄漏的情况。例如DDMS和MAT,MAT是Memory Analyzer Tool的缩写,MAT可以安装eclipse插件(更新地址http://download.eclipse.org/mat/1.4/update-site/),可以使用比插件方便的RCP(下载地址:http://www.eclipse.org/mat/downloads.php)。对于MAT的使用我们暂时不详细讲解,小伙伴们可以去(http://www.eclipse.org/mat/中查看Documentation中查看,里面还有blog可以看)
。
查看内容泄漏的方法步骤:
1.生成.hprof文件(使用DDMS生成,有必要的话,我给小伙伴录制一个视频讲解教程)
2.使用MAT导入.hprof文件
3.使用MAT的视图工具分析内存
备注:由于有文件保存,肯定会用到SD卡,用模拟器的小伙伴不要忘记创建SD卡和让测试应用有读写SD卡的权限。如果真的没有SD卡,小伙伴可以使用android.os.Debug中的方法手动指定.hprof的内存(不是运行时内存,指的是系统的内存存储)位置,例如
xxxButton.setOnclickListener(new View.OnClickListener(){
android.os.Debug.dumpHprofData(“/data/tem/XXX.hprof”);//文件路径可以是SD卡路径
});如果使用android.os.Debug.dumpHprofData()方法手动生成的.hprof文件,需要使用Android/Tools/ hprofconv xxx.hprof yyy.hprof把原来的xxx.hprof转换成yyy.hprof文件(这个文件才是MAT分析的文件)。
目前查看内存分析查找内存泄漏的方法还有以下几种
1.使用命令查看某个进程的内存。例如创建一个脚本文件xxx.sh.该文件的内容指定程序1秒钟输出某个进程的内存使用情况 代码如下
#!/bin/bash
While true; do adb shell procrank | grep “进程名称”
Sleep 1
done
2.使用Top命令查看内存
Adb shell top -m 10//查看使用资源最多的10个进程
Adb shell top|grep 进程名称 //查看指定进程的内存
3. free命令
Free命令用来显示内存使用情况,使用权限是所有用户。格式如下
Free [-b|-k|-m] [-o] [-s delay] [-t] [-v]
参数 -b/-k/-m表示以B、KB、MB为单位显示内存使用情况
参数 -s delay 显示每隔多少秒数来显示一次内存使用情况
参数 -t 显示内存总和列
参数 -o 不显示缓冲区调节列
Android 为应用进程分配的内存上限保存在ANDROID_SOURCE/system/core/rootdir/init.rc脚本中。