Android AMS——进程优先级更新(十八)

        AMS 中的 updateOomAdjLocked 方法实现了进程优先级的动态更新。

获取 oom_adj:

adb shell ps|grep com.xiaoxu.mytest
adb shell cat /proc/21375/oom_adj   

        每个等级的进程又有对应的优先级,使用oom_adj值来表示,进程回收机制就是根据这个adj值来进行的 前台进程adj值最低,代表进程优先级最高,空进程adj值越高,最容易被kill,对于相等优先级的进程:使用的内存越多越容易被杀死。

一、LMK机制

        LMK 全称 Low Memory Killer。在Android中,即使当用户退出应用程序后,应用进程也还会存在内存中,方便下次可以快速进入应用而不需要重新创建进程。这样带来的直接影响就是由于进程数量越来越多,系统内存会越来越少,这个时候就需要杀死一部分进程来缓解内存压力。至于哪些进程会被杀死,这个时候就需要用到 Low Memory Killer 机制来进行判定。

        Android 的 Low Memory Killer 基于 Linux 的 OOM 机制, 在 Linux 中,内存是以页面为单位分配的,当申请页面分配时如果内存不足会通过以下流程选择 bad 进程来杀掉从而释放内存。

alloc_pages -> out_of_memory() -> select_bad_process() -> badness() 

        LMK 驱动层在用户空间指定了一组内存临界值及与之一一对应的一组 oom_adj 值,当系统剩余内存位于内存临界值中的一个范围内时,如果一个进程的 oom_adj 值大于或等于这个临界值对应的

你可能感兴趣的:(Android,AMS,android,AMS)