zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

APP内存占用测试

2023-09-11 14:22:10 时间

APP内存占用测试

1 主要测试点

空闲状态

切换至后台或者启动后不做任何操作,消耗内存最少。

中强度状态 

时间偏长的操作应用。

高强度状态

高强度使用应用,可以跑 monkey 来测试(通常用来测试内存泄漏)。

内存泄漏 
指使用 malloc 或 new 申请了一块内存,但是没有通过 free 或 delete 将内 存释放,导致这块内存一直处于占用状态。 

2 测试方法

使用 adb 命令 
adb shell dumpsys meminfo welab.bank.mobile.stage
 
主要指标 

Native heap alloc、Dalvik heap alloc 
若这两个值一直增长,说明可能出现内存泄漏

PSS,

App 实际占用的内存大小:

下图可以看出内存总共占用329581,也就是329M,说明该APP占用内存很大

多次中这条adb命令,对比以下参数:
Native heap alloc、Dalvik heap alloc 、总内存

主要关注

退出某个页面后,内存是否有回落。 
如果没有及时回落,且程序自动 GC(Garbage Collection,垃圾回收)或 者手动 GC,那便可确认有问题。 

进行某个操作后,内存是否增长过快。
如果增长过快,也有可能存在风险,需重复操作确认。

android程序内存被分为2部分:native和dalvik
dalvik就是我们平常说的java堆,
我们创建的对象是在这里面分配的
查看pss total和heap size(27716KB)
不能超过最大限制(使用下面的命令查看)

adb shell
getprop | grep heapgrowthlimit


查看单个应用程序最大内存限制(meminfo里面的dalvik heap size的最大值27716KB,
如果超出了192M那就很可能会发生OOM)

 

总结:
每次gc后,pss total没有明显回落,就有可能存在内存泄漏,但仍需长时间观察。
dalvik heap size超过heapgrowthlimit会发生OOM,
但如果Manifest中的application标签中声明android:largeHeap=True,
则dalvik heap达到heapgrowthlimit限制的时候不会出现OOM,
需要达到heap size的时候才会出现OOM

adb shell
getprop | grep dalvik.vm.heapsize  单个java虚拟机最大的内存限制

 

再次总结:
dalvik.vm.heapstartsize----------初始分配的内存大小
dalvik.vm.heapgrowthlimit------应用的最大内存限制
dalvik.vm.heapsize--------------java虚拟机最大内存限制