Android中dumpsys meminfo与/proc/meminfo获取空闲内存不一致的问题

一、需求

获取当前系统中应用可用的空闲内存。

二、遇到的问题

方法一:dumpsys meminfo

Total RAM: 3,498,412K (status normal)
 Free RAM: 1,420,845K (  554,397K cached pss +   729,900K cached kernel +   136,548K free)
 Used RAM: 2,125,902K (1,741,086K used pss +   384,816K kernel)
 Lost RAM:   268,850K
   Tuning: 256 (large 512), oom   325,000K, restore limit   108,333K (high-end-gfx)

可知通过此方法获取的free mem大约为1.4G。

方法二:cat /proc/meminfo

MemTotal:        3498412 kB
MemFree:          136596 kB
MemAvailable:    1500252 kB
Buffers:          150052 kB
Cached:          1313300 kB
SwapCached:        89844 kB
Active:          1218484 kB
Inactive:        1171716 kB
Active(anon):     472168 kB
....

可知通过此方法获取的free mem大约为0.13G。

发现通过这两个方法获取的free mem相差非常的大,使用android手机自带的内存管理器查看,结果如下:
这里写图片描述
也就是说android系统自带的内存管理器显示的可用内存和方法一(dumpsys meminfo)是一致的。这是为什么呢?android系统又是怎么计算的呢?下面分析。

三、分析

参考对dumpsys的分析:
- dumpsys meminfo执行流程(一)
- dumpsys meminfo执行流程(二)
- dumpsys meminfo执行流程(三)
可知,dumpsys meminfo获得的free mem = cached pss + cached kernel + free + ion cached + gpu cached(系统cached APP PSS总和 + meminfo的MemFree + Cached + Buffers-Mapped + meminfo的display ion和gpu模块的内存占用)。
其中:
cached pss:dumpsys meminfo中 cachedAPP那一栏的PSS总和
cached kernel:meminfo的Cached+Buffers-Mapped
free:meminfo的MemFree
ion cached以及gpu cached:display相关ion和gpu模块的内存占用

四、总结

所以,dumpsys meminfo是/proc/meminfo中的MemFree加上一些cache和buffer。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。所以空闲内存=free+buffers+cached。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hello2mao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值