Android 內(nèi)存管理機(jī)制

前言:Android系統(tǒng)是基于Linux內(nèi)核開發(fā)的操作系統(tǒng),而Linux系統(tǒng)有其獨到的內(nèi)存管理機(jī)制,會在進(jìn)程活動停止后結(jié)束該進(jìn)程。Android在此基礎(chǔ)上優(yōu)化了內(nèi)存管理,會把進(jìn)程都保存在內(nèi)存中粘我,直到系統(tǒng)需要更多內(nèi)存為止,釋放部分進(jìn)程痹换。這些被保存在內(nèi)存中的進(jìn)程涂滴,并不會影響系統(tǒng)的運行速度,相反晴音,在重新打開這些進(jìn)程時柔纵,會提升進(jìn)程啟動速度

Android 內(nèi)存管理

分配機(jī)制

Android為每個進(jìn)程分配內(nèi)存的時候,采用了彈性的分配方式锤躁,也就是剛開始并不會一下分配很多內(nèi)存給每個進(jìn)程搁料,而是給每一個進(jìn)程分配一個“夠用”的量。這個量是根據(jù)每一個設(shè)備實際的物理內(nèi)存大小來決定的系羞。隨著應(yīng)用的運行郭计,可能會發(fā)現(xiàn)當(dāng)前的內(nèi)存可能不夠使用了,這時候Android又會為每個進(jìn)程分配一些額外的內(nèi)存大小椒振。但是這些額外的大小并不是隨意的昭伸,也是有限度的,系統(tǒng)不可能為每一個App分配無限大小的內(nèi)除澎迎。

Android系統(tǒng)的宗旨是最大限度的讓更多的進(jìn)程存活在內(nèi)存中庐杨,因為這樣的話,下一次用戶再啟動應(yīng)用夹供,不需要重新創(chuàng)建進(jìn)程灵份,只需要恢復(fù)已有的進(jìn)程就可以了,減少了應(yīng)用的啟動時間哮洽,提高了用戶體驗填渠。

回收機(jī)制

Android 的每個應(yīng)用程序都會使用一個專有的Dalvik(ART4.4以上)虛擬機(jī)實例來運行,它是由Zygote服務(wù)進(jìn)程演變過來的,每個應(yīng)用程序都在獨立的進(jìn)程中運行氛什。好處如下:

  • 如果程序在運行過程中出現(xiàn)了內(nèi)存泄漏的問題莺葫,僅僅會使得自己的進(jìn)程被殺掉,而不會影響其他進(jìn)程
  • Android為不同類型的進(jìn)程分配了不同的內(nèi)存使用上限枪眉,如果應(yīng)用進(jìn)程使用的內(nèi)存超過了這個上限徙融, 則會被系統(tǒng)視為內(nèi)存泄漏,從而被殺掉瑰谜。
  • Android會為每個應(yīng)用程序分配一個單獨的LINUX用戶。Android會盡量保留一個正在運行進(jìn)程树绩,只在內(nèi)存資源出現(xiàn)不足時萨脑,Android會嘗試停止一些進(jìn)程從而釋放足夠的資源給其他新的進(jìn)程使用, 也能保證用戶正在訪問的當(dāng)前進(jìn)程有足夠的資源去及時地響應(yīng)用戶的事件饺饭。Android會根據(jù)進(jìn)程中運行的組件類別以及組件的狀態(tài)來判斷該進(jìn)程的重要性渤早,Android會首先停止那些不重要的進(jìn)程。按照重要性從高到低一共有五個級別就是我們常說的:前臺進(jìn)程瘫俊、可見進(jìn)程鹊杖、服務(wù)進(jìn)程、后臺進(jìn)程扛芽、空進(jìn)程骂蓖。

簡單說,

  • 每個應(yīng)用程序都是一個獨立的進(jìn)程川尖,互不影響登下,進(jìn)程死掉不會導(dǎo)致系統(tǒng)崩潰、重啟叮喳。
  • 每個應(yīng)用程序都有內(nèi)存上限被芳,接近、超過都會被kill

Android進(jìn)程種類

增加了桌面進(jìn)程和內(nèi)容供應(yīng)節(jié)點
1. 前臺進(jìn)程(foreground)
目前正在屏幕上顯示的進(jìn)程和一些系統(tǒng)進(jìn)程馍悟。舉例來說畔濒,Dialer,Storage锣咒,Google Search等系統(tǒng)進(jìn)程就是前臺進(jìn)程侵状;再舉例來說,當(dāng)你運行一個程序毅整,如瀏覽器壹将,當(dāng)瀏覽器界面在前臺顯示時,瀏覽器屬于前臺進(jìn)程(foreground)毛嫉,但一旦你按home回到主界面诽俯,瀏覽器就變成了后臺程序(background)。我們最不希望終止的進(jìn)程就是前臺進(jìn)程。
2. 可見進(jìn)程(visible)
可見進(jìn)程是一些不再前臺暴区,但用戶依然可見的進(jìn)程闯团,舉個例來說:widget、輸入法等仙粱,都屬于visible房交。這部分進(jìn)程雖然不在前臺,但與我們的使用也密切相關(guān)伐割,我們也不希望它們被終止(你肯定不希望時鐘候味、天氣,新聞等widget被終止隔心,那它們將無法同步白群,你也不希望輸入法被終止,否則你每次輸入時都需要重新啟動輸入法)
3. 桌面進(jìn)程(home app)
即launcher硬霍,保證在多任務(wù)切換之后帜慢,可以快速返回到home界面而不需重新加載launcher
4. 次要服務(wù)(secondary server)
目前正在運行的一些服務(wù)(主要服務(wù),如撥號等唯卖,是不可能被進(jìn)程管理終止的粱玲,故這里只談次要服務(wù)),舉例來說:谷歌企業(yè)套件拜轨,Gmail內(nèi)部存儲抽减,聯(lián)系人內(nèi)部存儲等。這部分服務(wù)雖然屬于次要服務(wù)橄碾,但很一些系統(tǒng)功能依然息息相關(guān)胯甩,我們時常需要用到它們,所以也太希望他們被終止
5. 后臺進(jìn)程(hidden)
即是后臺進(jìn)程(background)堪嫂,就是我們通常意義上理解的啟動后被切換到后臺的進(jìn)程偎箫,如瀏覽器,閱讀器等皆串。當(dāng)程序顯示在屏幕上時淹办,他所運行的進(jìn)程即為前臺進(jìn)程(foreground),一旦我們按home返回主界面(注意是按home恶复,不是按back)怜森,程序就駐留在后臺,成為后臺進(jìn)程(background)谤牡。后臺進(jìn)程的管理策略有多種:有較為積極的方式副硅,一旦程序到達(dá)后臺立即終止,這種方式會提高程序的運行速度翅萤,但無法加速程序的再次啟動恐疲;也有較消極的方式,盡可能多的保留后臺程序,雖然可能會影響到單個程序的運行速度培己,但在再次啟動已啟動的程序時碳蛋,速度會有所提升。這里就需要用戶根據(jù)自己的使用習(xí)慣找到一個平衡點
6. 內(nèi)容供應(yīng)節(jié)點(content provider)
沒有程序?qū)嶓w省咨,進(jìn)提供內(nèi)容供別的程序去用的肃弟,比如日歷供應(yīng)節(jié)點,郵件供應(yīng)節(jié)點等零蓉。在終止進(jìn)程時笤受,這類程序應(yīng)該有較高的優(yōu)先權(quán)
7. 空進(jìn)程(empty)
沒有任何東西在內(nèi)運行的進(jìn)程,有些程序敌蜂,比如BTE箩兽,在程序退出后,依然會在進(jìn)程中駐留一個空進(jìn)程紊册,這個進(jìn)程里沒有任何數(shù)據(jù)在運行,作用往往是提高該程序下次的啟動速度或者記錄程序的一些歷史信息快耿。這部分進(jìn)程無疑是應(yīng)該最先終止的囊陡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市掀亥,隨后出現(xiàn)的幾起案子撞反,更是在濱河造成了極大的恐慌,老刑警劉巖搪花,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遏片,死亡現(xiàn)場離奇詭異,居然都是意外死亡撮竿,警方通過查閱死者的電腦和手機(jī)吮便,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幢踏,“玉大人髓需,你說我怎么就攤上這事》坎酰” “怎么了僚匆?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長搭幻。 經(jīng)常有香客問我咧擂,道長,這世上最難降的妖魔是什么檀蹋? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任松申,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘攻臀。我一直安慰自己焕数,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布刨啸。 她就那樣靜靜地躺著堡赔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪设联。 梳的紋絲不亂的頭發(fā)上善已,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機(jī)與錄音离例,去河邊找鬼换团。 笑死,一個胖子當(dāng)著我的面吹牛宫蛆,可吹牛的內(nèi)容都是我干的艘包。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼耀盗,長吁一口氣:“原來是場噩夢啊……” “哼想虎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叛拷,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤舌厨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后忿薇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裙椭,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年署浩,在試婚紗的時候發(fā)現(xiàn)自己被綠了揉燃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡筋栋,死狀恐怖你雌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情二汛,我是刑警寧澤婿崭,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站肴颊,受9級特大地震影響氓栈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜婿着,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一授瘦、第九天 我趴在偏房一處隱蔽的房頂上張望醋界。 院中可真熱鬧,春花似錦提完、人聲如沸形纺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逐样。三九已至,卻和暖如春打肝,著一層夾襖步出監(jiān)牢的瞬間脂新,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工粗梭, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留争便,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓断医,卻偏偏與公主長得像滞乙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鉴嗤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,647評論 2 354

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