adoid性能测试包含哪些内容(adoid性能检测)
导语:Android性能测试方法大放送(6)——内存泄漏
今天简单讲解一下内存泄漏的问题,关于如何查看将在以后将工具的时候再具体讲解。
一、Android内存管理机制
进程保存在内存中,在占用内存未超过阈值前系统不会进行主动清除(可以主动制定阈值,例如还剩20%的内存就会主动触发清除机制),随着应用的增多,试图保存在内存中的进程也随之增多,导致系统流畅度降低。
二、解决方法
赋予系统主动清除内存的能力,例如待机后杀死不必要的进程。
三、关于内存泄漏方面的测试,可以通过几个方面来测试: 1、通过monkey压力测试记录内存的使用情况,分析数据曲线图和日志情况;
2、通过eclipse上的mat+heap来分析存在内存泄漏方面的节点
四、Android内存限制
利用命令:adb pull /system/build.prop导出build文件,文件中有相关的阈值。
1、dalvik.vm.heapgrowthlimit:单个应用程序最大内存限制,超过这个值会产生OOM
2、dalvik.vm.heapsize:单个JAVA虚拟机最大的内存限制,超过这个值会产生OOM
3、dalvik.vm.heapstartsize:应用程序启动后分配的初始内存,调节这个值会影响到应用的流畅性和整体RAM消耗。这个值越小,系统RAM消耗越慢;相反,这个值越大系统RAM消耗越快,但是程序更流畅。
五、如何使用命令查看程序的内存使用情况
1、命令adb shell dumpsys meminfo $packagename or $pid 使用程序的包名或进程pid
如下图所示:
2、指标含义:size是需要的内存,而allocated是分配了的内存,对应的2列是native和dalvik,当总数也就是total这列超过单个程序内存的最大限制时,OOM就有可能出现了。
六、OOM的常见原因:
1、非静态内部类的静态实例容易造成内存泄漏;
2、activity使用静态成员;
3、使用handle时的内存问题;
4、注册某个对象后未反注册;
5、集合中对象没清理造成的内存泄漏;
6、资源对象没关闭造成的内存泄漏;
7、一些不良代码造成内存压力:Bitmap使用不当;构造Adapter时,没有使用缓存的convertView;在经常调用的方法中创建对象(例如循环)。
本文内容由小熊整理编辑!