Android 操作系统为什么不启用swap?
【來自】?https://www.jianshu.com/p/dc515d6f14db?
如今(2017)Android智能手機(jī)的存儲(chǔ)空間(64GB+)和讀寫速度(UFS2.0+)都已經(jīng)相當(dāng)可觀,那為何不啟用swap來增加內(nèi)存的可用空間呢?
Android是基于Linux的,但是在內(nèi)存策略上有自己的套路。先區(qū)別一下兩者的不同:Linux是一種“進(jìn)程內(nèi)存最大化”的分配策略,每個(gè)進(jìn)程拿著OS分配給自己的虛擬內(nèi)存,仿佛自己占滿了整個(gè)地址總線的用戶態(tài)空間。而這樣就自然需要Swap機(jī)制來保證物理內(nèi)存不被消耗殆盡,把最近最少使用的空間騰到外部存儲(chǔ)空間上,假裝還是存儲(chǔ)在RAM里。但是Android的的進(jìn)程分配策略是每個(gè)進(jìn)程都有一個(gè)內(nèi)存占用限制,這個(gè)具體大小由手機(jī)具體配置決定。目的就是為了讓更多的進(jìn)程都保留在RAM中,這樣每個(gè)進(jìn)程被喚起的時(shí)候可以避免外部存儲(chǔ)到內(nèi)部存儲(chǔ)的數(shù)據(jù)讀寫而造成的啟動(dòng)卡頓,加快更多的App被點(diǎn)開時(shí)候的響應(yīng)速度,所以這是為什么Android不采用“進(jìn)程內(nèi)存最大化”的分配策略的原因,一個(gè)流氓App把所有的內(nèi)存全搶了,豈不是手機(jī)卡成狗。隨之而然,Android采用了自己的LowMemoryKill策略來控制RAM中的進(jìn)程。所以目的相同,都是希望物理內(nèi)存的利用最大化,只不過兩者采用不同的策略,一個(gè)是Swap,一個(gè)是LowMemoryKill。
比較一下Swap和LowMemoryKill的區(qū)別:Swap通過將最不頻繁使用的進(jìn)程數(shù)據(jù)寫入磁盤,來給物理內(nèi)存騰出空間。LowMemoryKill通過給進(jìn)程分等級(jí),來選擇級(jí)別最低去殺死來騰出物理內(nèi)存空間。Android系統(tǒng)會(huì)考慮進(jìn)程的回收利益,當(dāng)Android系統(tǒng)開始?xì)⑺繪RU緩存中的進(jìn)程時(shí),系統(tǒng)會(huì)判斷每個(gè)進(jìn)程殺死后帶來的回收收益。因?yàn)锳ndroid總是傾向于殺死一個(gè)能回收更多內(nèi)存的進(jìn)程,從而可以殺死更少的進(jìn)程,來獲取更多的內(nèi)存。殺死的進(jìn)程越少,對(duì)用戶體驗(yàn)的影響就越小。相比較而言,LowMemoryKill這種策略更符合手機(jī)OS的用戶體驗(yàn)需求。再者。你說UFS2.0+的讀寫速度相當(dāng)可觀,可那畢竟也是外部存儲(chǔ)設(shè)備,就目前而言和RAM的讀寫速度相比還是慢太多。并且也沒有那種系統(tǒng)架構(gòu)可以直接讓CPU和外部存儲(chǔ)的數(shù)據(jù)交互,所以它再快,也還是一種外部存儲(chǔ)設(shè)備而已。
總結(jié)
以上是生活随笔為你收集整理的Android 操作系统为什么不启用swap?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WWISE 交互式音频库
- 下一篇: 关于动画的优化