美文网首页
基础简介

基础简介

作者: 禅座 | 来源:发表于2019-06-14 13:50 被阅读0次

    Android 系统将尽量长时间地保持应用进程,但为了新建进程或运行更重要的进程,需要清除旧进程来回收内存。
    为了确定保留或终止哪些进程,系统会对进程进行分类。 需要时,系统会首先消除重要性最低的进程,然后是清除重要性稍低一级的进程,依此类推,以回收系统资源。
    https://developer.android.google.cn/guide/components/processes-and-threads.html?hl=zh-cn

    Low Memory Killer

    系统出于体验和性能上的考虑,app在退到后台时系统并不会真正的kill掉这个进程,而是将其缓存起来。打开的应用越多,后台缓存的进程也越多。
    在系统内存不足的情况下,系统开始依据自身的一套进程回收机制来判断要kill掉哪些进程,以腾出内存来供给需要的app, 这套杀进程回收内存的机制就叫 Low Memory Killer。

    cat /sys/module/lowmemorykiller/parameters/minfree 
    

    通过该命令可以查看内存阈值


    image.png

    内存阈值在不同的手机上不一样,一旦低于该值,Android便开始按顺序关闭进程. 因此Android开始结束优先级最低的空进程,即当可用内存小于180MB(46080)(这些数字的单位是page. 1 page = 4 kb)

    • 18432–前台进程
    • 23040–可见进程
    • 27648–服务进程
    • 32256–后台进程
    • 36864–contentProvider
    • 46080–空进程

    oom_adj

    进程的优先级通过进程的adj值来反映,它是linux内核分配给每个系统进程的一个值,进程回收机制根据这个值来决定是否进行回收。adj的值越小,进程的优先级越高。
    可以通过以下命令可以看到当前进程的adj值。(需要[root]权限)

    cat /proc/进程id/oom_adj
    
    image.png
    image.png
    image.png

    adj越大,占用内存越多会被最先kill掉,所以保活就成了降低oom_adj的值,以及如何使得我们应用占的内存最少.


    image.png

    相关文章

      网友评论

          本文标题:基础简介

          本文链接:https://www.haomeiwen.com/subject/zvqlxctx.html