無論手機的物理內存有多大,Android都能將其充分利用,將需要用到(包括之前用過的)的數據從硬盤讀入到內存,利用內存的高速保證系統(tǒng)的數據訪問性能,也就是說,可用內存越小,內存的利用率就更高,其中的數據就越多,數據訪問的命中率就越高,系統(tǒng)也就越快。如果還有人和你說手機用不了4GB這么的大內存,那只是廠商的噱頭而已,你完全可以鄙視再教育之。
你可能會問,當打開的應用越來越多,占用的內存總會爆滿的,那怎么辦呢?
該出手時就出手,Android有著優(yōu)秀的內存回收機制
在上面舉例中,3GB內存的手機只有81MB的可用內存了,如果此時打開需要256MB內存的“騰訊視頻”,會提示“內存不足”嗎?答案是不會的。
當內存不足時,內存回收機制就開始起作用了
實際上,作為Android的開發(fā)語言Java沒有提供任何操作來釋放內存(這也是與IOS很大的不同點),是通過系統(tǒng)的內存回收機制來進行管理。Android使用了一個名為Low Memory Killer(LMK)的機制來管理內存,當內存出現不足時,LMK就開始揮舞屠刀殺掉一些進程,那么問題來了,殺誰?
說到這兒,必須多費點筆墨。Android會對進程的重要性進行評估,以oom_adj來表示,oom_adj的值越小,則重要性越高,oom_adj的值越大,該進程被系統(tǒng)選中殺掉的可能性越高,當oom_adj值為0,這意味著它永遠不會被系統(tǒng)終止。
Android有一套自己獨特的進程管理,比如可以設定“當內存小于22M時,結束oom_adj大于14的進程”這樣的策略,可以看到oom_adj非常重要,關乎進程的死生命運。