测试Android应用性能时,adb shell top的Res与dumpsys meminfo的Rss有何区别?
adb shell top的Res与dumpsys meminfo的Rss区别解析
核心定义与统计差异
adb shell top 里的Res
就是读取Linux内核/proc/[pid]/statm文件里的resident字段计算出来的,具体为驻留物理内存的页面数 × 系统页面大小。这个值包含:- 进程独有的用户空间内存
- 进程用到的所有共享库的驻留内存(不管其他进程是否使用这些库,全部计入)
- 和进程相关的部分内核空间内存(比如内核栈、页表这类)
adb dumpsys meminfo 里的Rss
是Android专门针对应用进程优化的内存统计,仅聚焦用户空间内存,分为Private Rss和Shared Rss,总RSS为两者之和:Private Rss:进程独占的物理内存(包括私有脏页、私有干净页)Shared Rss:进程与其他进程共用的物理内存(比如系统共享库、框架资源等)
它会过滤掉内核相关的内存页,统计逻辑更贴合Android应用的内存模型。
数值差异的核心原因
你观测到的数值不一致,主要源于统计范围的不同:
top的Res包含了内核层面的内存开销,而dumpsys meminfo的Rss仅统计应用用户空间的内存- 部分Android版本的
top对共享库内存是全量计入,而dumpsys meminfo的Rss虽然也全量统计共享内存,但因为过滤了内核页,结果仍会比Res小。
补充:与PSS的关联
你之前的理解是正确的:PSS是将共享内存按使用进程数量分摊后的统计值,而不管是top的Res还是meminfo的Total RSS,都是全量统计共享内存,不会对共享部分做分摊。
内容的提问来源于stack exchange,提问作者stephen
相关产品推荐
相关产品推荐

