標籤:做了 linux核心 習慣 釋放 定時 androi sam manage 電量
常常聽到身邊用安卓的朋友抱怨手機卡頓,記憶體動不動就快沒了。而Google聲稱在512M的記憶體下也能流暢執行Android 4.4。究竟它做了什嗎?
總結一下它主要做了四件事:
1.最佳化核心,使用ActivityManager來降低直接記憶體回收
2.最佳化LMK(low memory killer)的臨界值
3.使能KSM(Kernel Samepage Merging)
4.使能ZRAM取代SWAP分區
這幾個事情,個人僅僅有第三和第四件事情看起來比較靠譜。
最佳化核心的事情:
摘自Google官方網站的英文介紹,翻譯過來的意思大概是: 改動臨界值,降低直接記憶體回收。由於直接記憶體回收會須要額外的IO操作,耗時較大。利用空暇的時間添加後台回收。
眾所周知,對EMMC讀寫的時候,是非常耗費時間的,由於記憶體的讀寫速度要高出EMMC讀寫速度幾個量級,因此降低與EMMC互動的確能夠節省非常多時間。降低卡頓,可是每一個人的使用習慣不同。怎麼要改動演算法使得降低直接記憶體回收呢?我不知道,可是我認為這個最佳化等於說廢話。究竟咋樣,使用過後才知道。
關於LMK:
Linux核心中。用OOM來回收記憶體,即當記憶體不夠的時候。調用一種演算法,把那些不用的,優先順序別比較低的。都給釋放掉,這樣騰出一部分記憶體,於是記憶體就變大了,而Android中,對這個OOM機製做了一個最佳化。它就叫LMK。
它覺得。假設等到OOM發生的時候,記憶體已經很不足了,這個時候再去釋放記憶體,系統的回應時間會變的很長,造成很差的使用者體驗,於是LMK做了一個改變。定時檢查空暇記憶體。當少於某個伐值的時候,就殺掉一些進程。騰出一些空間。這樣保證系統中一直有較大的空暇記憶體。能夠降低卡頓。有道理,後面的章節中會細緻講訴LMK。
KSM:
這個東西早在2009年的時候就出來了。可是反映比較平淡,原因是:KSM合并同樣頁面。即合并副本記憶體。能夠節省不必要的記憶體。但而採用此方法,會添加耗電量,不得已的時候才會開啟。
什麼是ZRAM:
說的明確一點,ZRAM就是SWAP的一個改進。一般發生SWAP的時候,是把要置換出去的資料存到外部磁碟上(手機就是EMMC,電腦就是硬碟),這樣會減少效率,於是聰明的開發人員們相處一個方法,那就是把要置換出去的東西壓縮還放在記憶體中,這樣消耗的僅僅是解壓時間,而這個時間遠遠小於與外部磁碟互動所消耗的時間。
是個比較靠譜的方式,以下的章節中,將具體講訴它的調用過程以及怎樣開啟。
於是LMK,KSM和ZRAM是筆者覺得比較靠譜的方式,以下的幾個章節。將分別講訴他們怎樣被使能。以及詳細的調用過程和原理。
巧婦能為少米之炊(1)——Android下小記憶體下的生存之道