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