应用可使用的最大内存

在针对每一个手机进行内存测试前,需要了解一下当前设备给每个应用分配的最大内存是多少。


android设备对当个应用可用到的最大内存是做了限定的,当应用实际使用的内存超过了这个限额之后,应用就会发生OOM。当然不同品牌,不同型号的设备对这个值得大小规定是不同的,这个值被定义在/system/build.prop文件中。
我们可以pull出build.prop文件查看或者直接用shell命令查看。


用命令查看
C:\Users\Administrator>adb shell
riva:/ $ getprop | grep dalvik.vm.heap
[dalvik.vm.heapgrowthlimit]: [192m]
[dalvik.vm.heapmaxfree]: [8m]
[dalvik.vm.heapminfree]: [4m]
[dalvik.vm.heapsize]: [512m]
[dalvik.vm.heapstartsize]: [16m]
[dalvik.vm.heaptargetutilization]: [0.75]


下面我们针对这几个参数做一下解释
[dalvik.vm.heapgrowthlimit]: [192m]
它是说在这台设备里单个应用可使用的最大内存为192M,如果超过这个值应用就会发生OOM。(仅仅针对dalvik堆,不包括native堆)


[dalvik.vm.heapsize]: [512m]
它表示在manifest中申请了android:largeHeap为true后,应用可使用的最大内存。
正常情况下,如果存在[dalvik.vm.heapsize]和[dalvik.vm.heapgrowthlimit],单个应用可使用的最大内存为[dalvik.vm.heapgrowthlimit]的值。


[dalvik.vm.heapstartsize]: [16m]
它表示堆分配的初始大小,会影响到整个系统对物理内存,即RAM的使用程度和第一次使用应用时的流畅程度。
它值越小,系统ram消耗越慢,但一些较大应用一开始不够用,需要调用gc和堆调整策略,导致应用反应较慢。
它值越大,这个值越大系统ram消耗越快,但是应用更流畅。




[dalvik.vm.heapmaxfree]: [8m],  [dalvik.vm.heapminfree]: [4m],  [dalvik.vm.heaptargetutilization]: [0.75]
这三组属性值是协调使用的,放GC触发后,垃圾回收器会回收应用不使用的对象,这样free的空间就会变大,当然这个改变可能会很大,也可能会很小,此时系统会根据预先设定的内存利用率[dalvik.vm.heaptargetutilization],最大空闲内存[dalvik.vm.heapmaxfree]和最小空闲内存[dalvik.vm.heapminfree]来做调整,如果GC后空间很大就会相应的回收一些空间,调整空闲内存的大小,如果内存很小,系统也会相应的调整来扩大空闲内存。
更多详细信息可参考:https://www.zhihu.com/question/40371025/answer/95430674


补充:
dalvik heap和native heap
android对dalvik heap做了硬性限制,当超过这个值得时候应用会发生OOM,但此时的RAM可能还很充足,android这样做是为了能够使每个程序尽量使用更小的内存,从而让更多的进程可以常驻内存,给用户带来更快速的响应体验


VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS- Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS- Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS- Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值