天天看點

程序保活之LMK(LowMemoryKiller)的了解

想要了解有關程序優先級請自行檢視上一篇文章:https://blog.csdn.net/qq_36451275/article/details/95454643

這篇文章我們來了解一下有關LMK(LowMemoryKiller),咋一看這個大家應該都不怎麼了解,對于這一塊我也不是很了解,最近看到相關的資料就簡單的進行了整理。

一、為什麼要引入LMK呢?

程序的啟動分冷啟動和熱啟動,當使用者退出某一個程序的時候,并不會真正的将程序退出,而是将這個程序放到背景,以便下次啟動的時候可以馬上啟動起來,這個過程名為熱啟動,這也是Android的設計理念之一。這個機制會帶來一個問題,每個程序都有自己獨立的記憶體位址空間,随着應用打開數量的增多,系統已使用的記憶體越來越大,就很有可能導緻系統記憶體不足。為了解決這個問題,系統引入LowmemoryKiller(簡稱lmk)管理所有程序,根據一定政策來kill某個程序并釋放占用的記憶體,保證系統的正常運作

二、LMK基本原理:

所有應用程序都是從zygote孵化出來的,記錄在AMS中mLruProcesses清單中,由AMS進行統一管理,AMS中會根據程序的狀态更新程序對應的oom_adj值,這個值會通過檔案傳遞到kernel中去,kernel有個低記憶體回收機制,在記憶體達到一定閥值時會觸發清理oom_adj值高的程序騰出更多的記憶體空間

三、LMK殺死程序标準:

1、minfree

存放6個數值,機關記憶體頁面數(一個頁面4kb)

adb shell

su

cat /sys/module/lowmemorykiller/parameters/minfree

2、adj

cat /sys/module/lowmemorykiller/parameters/adj

3、檢視程序的adj值

/proc/<pid>/oom_adj

/proc/<pid>/oom_score_adj

4、記憶體門檻值在不同的手機上不一樣,一旦低于該值,Android便開始按順序關閉程序. 是以Android開始結束優先級最低的空程序,即當可用記憶體小于180MB(46080)

繼續閱讀