超能課堂(134):Android手機到底需要多大內存?

Android手機誕生至今10年,發展過程之迅速比起PC市場有過之而不及,硬件上的長足發展讓我們使用Android手機的體驗越來越好。不過大家也發現Android系統對於手機內存的需求就像個無底洞,給多少用多少,眼下就看見市面幾乎不見2GB內存的Android手機,這到底是為什麼?究竟多大容量的內存才能滿足Android的胃口?

超能课堂(134):Android手机到底需要多大内存?

Android系統使用內存多,究其原因,這是與Android採用Linux內核有密切關係,而Linux與windows在內存管理有著巨大區別。

提到Android的內存管理,我們不得不提起Linux內核,因為Android系統內核就是從Linux內核修改過來的,繼承了Linux內核優點以及主題框架,同時Android為了適應移動設備需求,在文件系統、內存管理、進程間通信機智和電源管理方面進行了修改,添加了相關的驅動程序和必要的新功能。Android在很大程度上保留了Linux的基本架構,因此Android系統的內存管理與Linux具有很高相似度。

用著Android手機的你會發現,剛開機手機內存就佔到一半以上,似乎空閒內存很少,大家就著急地開始狂殺後臺進程釋放內存,避免內存不夠造成卡頓。雖然表面上內存不夠用了,但其實這是Linux內存管理的非常優秀特性,Linux會無視物理內存容量,只要你給多大,它就會物盡其用,會把一些常用的數據從閃存上預先寫入到內存中,利用內存高速的讀寫性能提高數據訪問性能,間接地提高了我們應用啟動、運行速度。

但我們常用的Windows系統卻不是這樣,它只有在需要用到內存的時候才會給對應的進程分配內存,所以你會有一種錯覺,Windows不吃內存,而用Linux內核的Android卻非常佔用內存。

所以Android系統佔用內存多其實是個好事情,去年手機內存4GB起步,到今年6GB起步,甚至出現8GB內存,Android都將能充分利用起來,發揮了硬件規格提升帶來的好處,而Windows將其視為擺設,儘管你插滿4根槽32GB內存。

這就是為什麼我們的2GB內存Android手機,開機只剩500MB空閒,而4GB內存Android手機開機還是隻有1.5GB左右的空閒內存,因為其內存管理用得太“精明”了,有多少用多少。

Android系統內存究竟是怎麼調度的?——垃圾回收機制

超能课堂(134):Android手机到底需要多大内存?

我們都知道Android上的應用都是基於Java而來,每啟動一個應用就會產生相應一個虛擬機,Android對這些dalvik虛擬機內存作出硬性限制,這個限制非常嚴格,早期Android就限制在32MB,目的是迫使應用程序使用較小內存,讓內存常駐更多的進程,提高整個系統響應速度,而且程序啟動時候不需要從閃存加載到內存中,啟動速度自然提升。

但進程申請的空間超過上限閾值時,就會觸發“內存殺手”規則,為了保護用戶使用體驗,只會按順序銷燬優先級較低的進程來釋放物理內存,讓新加入、高優先級程序獲得更多內存。

但是一些大型應用程序,比如遊戲真的很需要大內存怎麼辦?隨著Android手機硬件瘋狂升級,祖傳2GB內存已經入不了廳堂,Google取消了32MB硬性要求,放寬上限。同時程序員是有辦法繞開整個虛擬機內存限制的,但過程非常複雜,這裡就不展開說,主要是利用了Android系統內的native heapsize不受限制特性。

那麼按照目前我們使用習慣來看,Android系統到底多少GB內存才夠用?

2008年第一臺Android手機HTC Dream G1只有192MB的內存,十年後的今天已經出現了8GB內存的手機,難道40倍的內存增長才能夠滿足今天的應用需求嗎?非也,只是對於Android系統來說內存是多多益善。

目前對於不同Android 7.0系統以上手機來說,手機開機後,光是“Android操作系統”、“Android系統”、“系統用戶界面”等進程就佔用了1.2-2GB內存,所以2GB內存手機必然頻繁進行內存回收,進而影響到手機流暢度,所以2GB內存手機越來越少了。

超能课堂(134):Android手机到底需要多大内存?

三星Galaxy S8手機內存佔用情況

常規手機App對內存佔用都在300MB左右,功能特別豐富的可能要到500MB,遊戲普遍上1GB。

下面讓我們來看看不同內存大小手機開機後的剩餘內存,加上一些必要的應用內存佔用,我們方可得到一個可供參考的內存需求量。

目前手機內存需求=Android系統必要+大型遊戲+應用後臺待機×15

=2000MB+1000MB+50MB×15

≈3.75GB

可見4GB內存對於目前Android系統手機來說必不可少。既然4GB就夠了,現在中端機普及6GB,高端上8GB意義何在?

非常有意義!因為APP對於內存佔用是動態的,其中就包含了一些圖片素材,對於1080P分辨率手機就加載1080P素材,而2K就加載2K素材,顯然分辨率越高,素材容量越大,當然對內存佔用越大。

你想想索尼還有4K分辨率的Xperia XZ2 Premium手機,內存越大,系統就不會頻繁回收內存,減少CPU佔用,提高流暢有莫大幫助。6GB/8GB內存顯然更加遊刃有餘,況且廠商宣傳上也好看。不記得“GT 630 4GB”的故事嗎?而且內存越大越不一定代表手機性能越好!

好了,又到了總結陳詞的時候啦。如果你平常就聊聊天、刷刷微博,玩玩《天天愛消除》、《歡樂鬥地主》,4GB內存足矣;如果你喜歡玩《絕地求生》、《荒野行動》這類大型遊戲,那麼4GB內存的Android手機是起步而已。

另外關於手機內存,大家都有些疑惑,再來講一講題外話。

為什麼越來越多手機都自帶進程管理軟件?

在內存剩餘不多時打開大型程序時會觸發系統自身的調進程調度策略,這是十分消耗系統資源的操作,特別是在一個程序頻繁向系統申請內存的時候。這種情況下系統並不會關閉所有打開的進程,而是選擇性關閉,頻繁的調度自然會拖慢系統。

比方說你需要運行《絕地求生:刺激戰場》這類大型遊戲,對於內存佔用必然是巨大的,如果你主動關閉一些沒用的進程釋放內存,可以確保大型遊戲更為流暢的運行。但是正常情況下你是不需要去管它,由Android系統的內存管理模塊自動管理即可。

超能课堂(134):Android手机到底需要多大内存?

內存裡這麼多進程待著,不會更加耗電嗎?

Google早就考慮到這一點,當應用被切換到後臺時,只會凍結它切換前最後一刻的運行狀態,此時不會再消耗CPU資源,只有那種後臺繼續執行任務的應用才會消耗資源,比方說是你在後臺播放音樂、導航之類的。因此這個設計本來就是為了適應手機多應用切換的,當你切換回程序時,不必再次加載界面資源,啟動速度更快,體驗更好。


分享到:


相關文章: