[轉載]給Android手機清理記憶體:是病,得治!
在Windows陪伴下成長起來的用戶來說,“記憶體不足”是留存在心底揮之不去的陰影,即便到了今天,到了Android系統,這個陰影依舊。實際上Android有著與Windows完全不一樣的記憶體管理機制,Windows上的那一套,在這兒並不是行之有效的。Android中可用記憶體只是個沒意義的數字
在Windows中,可用記憶體是越多越好,但在Android中,完全不必在意這個資料。有著3GB記憶體的某手機,實際可用記憶體只有81MB了,你可千萬別說這個系統好垃圾,只能顯得自己的無知。
Windows中只有需要用到記憶體時才會為程式分配記憶體,一旦這個程式被關閉,分配的記憶體也就釋放出來成為新的可用記憶體。然而絕大多數Android應用都沒有退出的功能表設計,這些運行過的應用無非是從前台轉入到後台,大多數依舊保留在記憶體中並不會也不需要主動釋放,這樣下次再運行該應用時,可以更快的啟動。
無論手機的實體記憶體有多大,Android都能將其充分利用,將需要用到(包括之前用過的)的資料從儲存空間讀入到主記憶體,利用記憶體的高速保證系統的資料訪問性能,也就是說,可用記憶體越小,記憶體的利用率就更高,其中的資料就越多,資料訪問的命中率就越高,系統也就越快。如果還有人和你說手機用不了4GB這麼的大記憶體,那只是廠商的噱頭而已,你完全可以鄙視之。
你可能會問,當打開的應用越來越多,佔用的記憶體總會爆滿的,那怎麼辦呢?
該出手時就出手,Android有著優秀的記憶體回收機制
在上面舉例中,3GB記憶體的手機只有81MB的可用記憶體了,如果此時打開需要256MB記憶體的軟件,系統會提示“記憶體不足”嗎?答案是不會的。
實際上,作為Android的開發語言Java沒有提供任何操作來釋放記憶體(這也是與iOS很大的不同點),是通過系統的記憶體回收機制來進行管理。Android使用了一個名為Low Memory Killer(LMK)的機制來管理記憶體,當記憶體出現不足時,LMK就開始揮舞屠刀殺掉一些進程,那麼問題來了,殺誰?
說到這兒,必須多費點筆墨。Android會對進程的重要性進行評估,以oom_adj來表示,oom_adj的值越小,則重要性越高,oom_adj的值越大,該進程被系統選中殺掉的可能性越高,當oom_adj值為0,這意味著它永遠不會被系統終止。
Android有一套自己獨特的進程管理,比如可以設定“當記憶體小於22M時,結束oom_adj大於14的進程”這樣的策略,可以看到oom_adj非常重要,關乎進程的死生命運。
像上表描述的那樣,在默認策略中,當記憶體低於24MB(6144*4K)時,LMK就會殺掉所有oom_adj為15的進程(即空進程),這個警戒值可以人為修改,一般情況下也沒必要去改變它。為了更好的評估進程的重要性,Android將進程分為六類,如下所述:
前台進程(foreground):
oom_adj=0,指正在當前螢幕上顯示的進程和一些系統進程,一旦你回到主介面或切換到其他程式,當前進程變為隱藏進程,前台進程是不會殺掉的;
可見進程(visible):
oom_adj=1,可見進程雖然不在前台,但依然可見,如widget、輸入法等,這部分進程也非常重要,基本上不可能被殺掉;
次要服務(secondary server):
oom_adj=2,目前正在運行的一些服務,如下載、播放音樂,它們雖然屬於次要服務,但與系統息息相關,一般也不會被殺掉;
隱藏進程(hidden):
oom_adj=7,這個很容易理解,當應用從前台轉入到後台後,也就成為隱藏進程了,通常一鍵清理記憶體就是清掉這些隱藏進程;
內容提供者(content provider):
oom_adj=14,沒有程式實體,只提供內容供別的程式去用的,比如日曆供應節點,顯然這類進程最有可能被先殺掉;
空進程(empty):
oom_adj=15,有些程式在程式退出後,依然會在進程中駐留一個空進程,這個進程裏沒有任何資料在運行,作用往往是提高該程式下次的啟動速度或者記錄程式的一些歷史資訊,這類進程無疑是要最先被殺掉的。
Android的記憶體管理機制非常適合嵌入式系統,能充分發揮出硬體的潛力,當記憶體越大,它的優勢就越明顯。
Android手機需要清記憶體嗎?
回到要討論的話題,Android手機需要清記憶體嗎?結論是再明顯不過:不需要!其實這個結論也適用iPhone手機,iOS在記憶體管理方面更為激進。
我們完全不用煩憂Android手機上的可用記憶體大小,也不需要去一鍵清理記憶體,有時可能還會適得其反,尤其是在手機記憶體2GB起步3GB成主流的今天,我們會很享受Android的記憶體管理機制。目前硬體規格的Android手機系統流暢度上都有著很好的表現,基本上能與iOS拉平,在Android 5.1.1以上版本中如絲般順滑都是可以期待的。
頁:
[1]