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


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

    获取 oom_adj:

    1. adb shell ps|grep com.xiaoxu.mytest
    2. 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 值大于或等于这个临界值对应的

  • 相关阅读:
    渗透测试之XSS漏洞:记一次模拟注入攻击
    .NET周刊【8月第2期 2023-08-14】
    MongoDB入门学习(一)
    MVC设计模式+过滤器与监听器
    FLOPS的计算
    【Android 内存优化】KOOM 快手开源框架线上内存监控方案-源码剖析
    力扣(LeetCode)792. 匹配子序列的单词数(C++)
    02-Tomcat打破双亲委派机制
    卷积神经网络卷积层池化层全连接层理解
    五、Vue3基础之五
  • 原文地址:https://blog.csdn.net/c19344881x/article/details/133914034