Android dumpsys meminfo 流程分析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android dumpsys meminfo 流程分析相关的知识,希望对你有一定的参考价值。
参考技术A [toc]我们使用 adb shell dumpsys meminfo <包名> 的时候,会输出应用的内存信息。
该功能是以一种系统服务的形式,被注册到 ServiceManager 中,等待 binder 的调用。
在系统启动的时候,在 Systemerver 中会开启一系列的系统服务,
1.1 -> frameworks/base/services/java/com/android/server/SystemServer.java
1.2 ->frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
通过上文,我们知道了 dumpsys meminfo 的实现是通过 一个 Binder 在 ServiceManager 中
具体的实现在 MemBinder 中,该类为 AMS 的内部类
2.1 ->frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
2.2 ->frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
我们再来看 AMS 的方法
2.3 ->frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
ASM 中获取内存信息的方法,包括了读取 smaps
关键的统计内存方法,Graphics+smaps
3.1 -> frameworks/base/core/java/android/os/Debug.java
3.2 -> frameworks/base/core/jni/android_os_Debug.cpp
3.3 -> frameworks/base/core/jni/android_os_Debug.cpp#load_maps
关键的数据读取操作,这里关系到 linux 内存管理的 smaps。
3.3.1 -> frameworks/base/core/jni/android_os_Debug.cpp
smaps 文件内存归类
3.4 -> frameworks/base/core/jni/android_os_Debug.cpp#read_memtrack_memory
获取 Graphics 内存
3.4.1-> frameworks/base/core/jni/android_os_Debug.cpp#read_memtrack_memory
根据 libmemtrack 获取进程正在使用的 Graphics 内存,在 smaps 文件中统计的 graphics 都不包含此部分
以上是关于Android dumpsys meminfo 流程分析的主要内容,如果未能解决你的问题,请参考以下文章
Android使用procrank和dumpsys meminfo分析内存占用情况
Android 内存优化dumpsys meminfo PID 查看单进程内存信息详解