Android內(nèi)存管理機(jī)制之幽靈殺手——LowMemory Killer

Android內(nèi)存管理其實(shí)是一個(gè)非常復(fù)雜和龐大的話題倒戏,Android系統(tǒng)的內(nèi)存管理機(jī)制有:Lowmemory Killer機(jī)制捏鱼,Ashmem機(jī)制缅叠,Pmem/Ion機(jī)制及Native內(nèi)存管理和Dalvik內(nèi)存管理和Jvm垃圾回收機(jī)制厉颤。我們今天只講Lowmemory Killer機(jī)制鼎文。

Android系統(tǒng)是基于Linux 內(nèi)核開發(fā)的開源操作系統(tǒng),而Linux系統(tǒng)的內(nèi)存管理有其獨(dú)特的動(dòng)態(tài)存儲(chǔ)管理機(jī)制贬墩。不過Android系統(tǒng)對(duì)Linux的內(nèi)存管理機(jī)制進(jìn)行了優(yōu)化榴嗅,Linux系統(tǒng)會(huì)在進(jìn)程活動(dòng)停止后就結(jié)束該進(jìn)程,而Android把這些進(jìn)程都保留在內(nèi)存中陶舞,直到系統(tǒng)需要更多內(nèi)存為止嗽测。Android是一個(gè)多任務(wù)系統(tǒng),也就是說可以同時(shí)運(yùn)行多個(gè)程序肿孵,一般來說唠粥,啟動(dòng)運(yùn)行一個(gè)程序是有一定的時(shí)間開銷的,因此為了加快運(yùn)行速度停做,當(dāng)你退出一個(gè)程序時(shí)晤愧,Android并不會(huì)立即殺掉它,這樣下次再運(yùn)行該程序時(shí)蛉腌,可以很快的啟動(dòng)官份。隨著系統(tǒng)中保留的程序越來越多只厘,內(nèi)存肯定會(huì)出現(xiàn)不足,這個(gè)時(shí)候Android系統(tǒng)開始揮舞屠刀殺進(jìn)程舅巷。Android系統(tǒng)中殺進(jìn)程的這個(gè)劊子手被稱作"Lowmemory Killer"懈凹,也就是我們要探討的這貨,它是在Linux內(nèi)核中實(shí)現(xiàn)的∏男常現(xiàn)在我們已經(jīng)知道殺手是誰了介评,那么問題來了,殺誰爬舰?

我們已經(jīng)清楚內(nèi)存不足時(shí)Lowmemory Killer會(huì)殺掉某些進(jìn)程们陆,那我們來看一下Android系統(tǒng)都有哪些進(jìn)程(按被殺死的可能性從低到高排列)。

1:前臺(tái)進(jìn)程(Forground App)

目前正在屏幕上顯示的進(jìn)程和一些系統(tǒng)進(jìn)程情屹,幾乎沒有被殺死的可能性坪仇,代表進(jìn)程:你目前正在讀這篇文章所用的應(yīng)用。

2:可見進(jìn)程(Visble App)

這部分進(jìn)程雖然不在前臺(tái)垃你,但與我們的使用也密切相關(guān)椅文,我們也不希望它們被終止,通常情況下不會(huì)被殺死惜颇,代表進(jìn)程:輸入法皆刺。

3:次要服務(wù)(Secondary Server)

這部分服務(wù)雖然屬于次要服務(wù),但很一些系統(tǒng)功能依然息息相關(guān)凌摄,我們時(shí)常需要用到它們羡蛾,所以也太希望他們被終止。代表進(jìn)程:聯(lián)系人內(nèi)部存儲(chǔ)锨亏。

4:后臺(tái)進(jìn)程(Hidden App)

就是我們通常意義上理解的啟動(dòng)后被切換到后臺(tái)的進(jìn)程痴怨,如瀏覽器,閱讀器等器予。當(dāng)程序顯示在屏幕上時(shí)浪藻,他所運(yùn)行的進(jìn)程即為前臺(tái)進(jìn)程(Foreground),一旦我們按Home返回主界面(注意是按Home乾翔,不是按Back)爱葵,程序就駐留在后臺(tái),成為后臺(tái)進(jìn)程(Background)末融。

5:內(nèi)容提供者(Content Provider)

沒有程序?qū)嶓w钧惧,僅提供內(nèi)容供別的程序去用的暇韧,比如日歷供應(yīng)節(jié)點(diǎn)勾习,在終止進(jìn)程時(shí),這類程序應(yīng)該有較高的優(yōu)先權(quán)懈玻。

6:空進(jìn)程(Empty App)

在程序退出后巧婶,依然會(huì)在進(jìn)程中駐留一個(gè)空進(jìn)程乾颁,這個(gè)進(jìn)程里沒有任何數(shù)據(jù)在運(yùn)行,作用往往是提高該程序下次的啟動(dòng)速度或者記錄程序的一些歷史信息艺栈。這部分進(jìn)程無疑是應(yīng)該最先被終止的英岭。

Android系統(tǒng)共有六類進(jìn)程,當(dāng)內(nèi)存發(fā)生不足時(shí)最先殺死的是空進(jìn)程湿右,如果殺死空進(jìn)程后依然無法保證足夠的Ram,屠刀將揮向內(nèi)容提供者诅妹,再不夠殺后臺(tái)進(jìn)程,以此類推毅人。當(dāng)然前臺(tái)進(jìn)程吭狡,可見進(jìn)程,次要服務(wù)這三個(gè)被殺死的肯能性很小丈莺。我們已經(jīng)搞清楚了殺誰的問題划煮,那么問題又來了,什么時(shí)候殺缔俄?

你可能會(huì)說就是Ram不足的時(shí)候殺唄弛秋,那到底什么時(shí)候視為Ram不足呢。Android系統(tǒng)有一個(gè)規(guī)則來回收內(nèi)存俐载,進(jìn)行內(nèi)存調(diào)度有個(gè)閥值蟹略,只有低于這個(gè)閥值系統(tǒng)才會(huì)按一個(gè)順序來關(guān)閉系統(tǒng)認(rèn)為最不重要的進(jìn)程,釋放Ram空間遏佣。為了更有說服力科乎,我們干脆來看看這個(gè)閥值到底是多少,不過要先獲取手機(jī)的Root權(quán)限贼急,打開你的Android手機(jī)Sys/Module/Lowmemorykiller/Parameters/Minfree的這個(gè)目錄文件茅茂,閥值就被寫在這里。以我手里這臺(tái)Nexus7為例,我得到一串?dāng)?shù)字:5418太抓,7224空闲,14448,36120走敌,45150碴倾,54180,這串?dāng)?shù)字是什么意思掉丽,我猜應(yīng)該是摩斯密碼吧跌榔,開個(gè)玩笑,當(dāng)然不是捶障,這六個(gè)數(shù)字分別代表了6種進(jìn)程(對(duì)應(yīng)上文的順序)可能被殺死的剩余內(nèi)存最小閥值僧须,這串?dāng)?shù)字的單位是Page,1Page=4Kb项炼,我們做一下轉(zhuǎn)換就54180Page=211Mb, 就是說當(dāng)運(yùn)行內(nèi)存小于211Mb的時(shí)候担平,Lowmemory Killer就要?dú)⑺繣mpty App示绊。Content Provider:45150Page=176Mb,當(dāng)運(yùn)行內(nèi)存小于176Mb的時(shí)候暂论,Lowmemory Killer不光要?dú)⑺繣mpty App面褐,還要?dú)⑺繡ontent Provider。Hidden App:141Mb取胎,Secondary Server: 56Mb展哭,Visible App:28Mb,F(xiàn)orgound App:21Mb闻蛀,以此類推摄杂。

我們可以獲取手機(jī)系統(tǒng)的內(nèi)存調(diào)度閥值,那么用戶可不可以更改這個(gè)閥值循榆?當(dāng)然可以析恢,Android最大的魅力就在于能滿足你的無限幻想,只要你想做秧饮,總是有辦法的映挂。打開Minfree文件,如果你是個(gè)Android骨灰級(jí)玩家盗尸,你甚至可以手動(dòng)修改文件內(nèi)的閥值大小柑船,高級(jí)玩家也可以借助工具自行修改,初級(jí)玩家還是洗洗睡了吧泼各。修改閥值有什么作用呢鞍时,這就好比一臺(tái)車,你可以把避震調(diào)教的硬一點(diǎn)扣蜻,來獲得更精準(zhǔn)的操控樂趣逆巍;你也可以把避震調(diào)教的軟一點(diǎn),來獲得更舒適的駕控體驗(yàn)莽使。再說回手機(jī)锐极,我們可以調(diào)大閥值,讓系統(tǒng)一直運(yùn)行在一個(gè)充裕的內(nèi)存環(huán)境中芳肌,當(dāng)然這個(gè)時(shí)候Lowmemory Killer可能要頻繁工作灵再,也會(huì)帶來相對(duì)應(yīng)的性能損耗。我們也可以調(diào)小閥值亿笤,讓系統(tǒng)緩存更多的進(jìn)程翎迁,這樣下次打開應(yīng)用的時(shí)候會(huì)更迅速,這里的缺點(diǎn)就是當(dāng)可用內(nèi)存比較少的時(shí)候打開一個(gè)大型應(yīng)用净薛,Lowmemory Killer會(huì)比較忙汪榔,用戶的直觀感覺就是有點(diǎn)卡。閥值設(shè)成多大罕拂,關(guān)鍵是找到一個(gè)適合自己的平衡點(diǎn)揍异。手機(jī)出廠系統(tǒng)會(huì)有一串默認(rèn)閥值全陨,這串閥值應(yīng)該是手機(jī)廠商調(diào)教過的一個(gè)比較舒適的平衡點(diǎn)了爆班,一般情況下不建議用戶自己手動(dòng)修改衷掷。

最后再說一個(gè)問題,如何正確的使用Android手機(jī)柿菩?如果你是一個(gè)Android 用戶戚嗅,你肯定經(jīng)常手動(dòng)殺后臺(tái)應(yīng)用,因?yàn)槟阌X得他們會(huì)耗電枢舶,但事實(shí)上并沒有懦胞,后臺(tái)應(yīng)用只是在內(nèi)存中保存了一個(gè)運(yùn)行狀態(tài),他們什么事都沒干凉泄,當(dāng)然也不會(huì)耗電(流氓應(yīng)用和常駐內(nèi)存的應(yīng)用除外)躏尉。 你又會(huì)說即便不耗電,也占內(nèi)存后众,占內(nèi)存又有何妨胀糜,系統(tǒng)有自己的內(nèi)存管理方式,你的手機(jī)系統(tǒng)里有個(gè)殺手 ?----- ?Lowmemory Killer蒂誉,這種事還是交給它來做吧教藻。。右锨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末括堤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子绍移,更是在濱河造成了極大的恐慌悄窃,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹂窖,死亡現(xiàn)場(chǎng)離奇詭異广匙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)恼策,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門鸦致,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涣楷,你說我怎么就攤上這事分唾。” “怎么了狮斗?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵绽乔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我碳褒,道長(zhǎng)折砸,這世上最難降的妖魔是什么看疗? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮睦授,結(jié)果婚禮上两芳,老公的妹妹穿的比我還像新娘。我一直安慰自己去枷,他們只是感情好怖辆,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著删顶,像睡著了一般竖螃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逗余,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天特咆,我揣著相機(jī)與錄音,去河邊找鬼录粱。 笑死腻格,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的关摇。 我是一名探鬼主播荒叶,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼输虱!你這毒婦竟也來了些楣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤宪睹,失蹤者是張志新(化名)和其女友劉穎愁茁,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體亭病,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鹅很,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了罪帖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片促煮。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖整袁,靈堂內(nèi)的尸體忽然破棺而出菠齿,到底是詐尸還是另有隱情,我是刑警寧澤坐昙,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布绳匀,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏疾棵。R本人自食惡果不足惜戈钢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望是尔。 院中可真熱鬧殉了,春花似錦、人聲如沸嗜历。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梨州。三九已至,卻和暖如春田轧,著一層夾襖步出監(jiān)牢的瞬間暴匠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工傻粘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留每窖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓弦悉,卻偏偏與公主長(zhǎng)得像窒典,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子稽莉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容