-
1 # 快科技問答
-
2 # 超能網
其實吧,這怪不得華為的EMUI,對於Android系統來說,這都是正常的,合理的,不要驚慌,一切要從Android的記憶體管理機制談起。
因為Android有著與Windows完全不一樣的記憶體管理機制,Windows上的那一套,尤其是經常出現“記憶體不足”的情況,在這兒並不是行之有效的。在Windows中,可用記憶體是越多越好,但在Android中,完全不必在意可用記憶體這個資料。
無論手機的物理記憶體有多大,Android都能將其充分利用,它會將需要用到的資料從硬碟讀入到記憶體,以保證資料的訪問效能,當應用從前臺轉到後臺時,這些記憶體資料並不會立即清除(也沒必要),所謂的可用記憶體自然就是越用越小了,當下次該應用需要用到資料時,直接從記憶體中呼叫,就會快速而流暢。
但是有個問題,當開啟的應用越來越多,佔用的記憶體總會爆滿的,那怎麼辦呢?
其實這個也不用擔心的,Android有自己的記憶體回收機制來進行管理。它使用了一個名為Low Memory Killer(LMK)的機制來管理記憶體,當記憶體出現不足時,LMK殺掉一些不重要的程序釋放一些空間。
Android會對程序的重要性進行評估,其oom_adj的值越小,則重要性越高,當oom_adj值為0,這意味著它永遠不會被系統終止。
Android預設的程序管理策略
為了更好的評估程序的重要性,Android將程序分為六類,即前臺程序(foreground):oom_adj=0;可見程序(visible):oom_adj=1,如widget、輸入法等,這部分程序也非常重要,基本上不可能被殺掉;次要服務(secondary server):oom_adj=2,目前正在執行的一些服務,如下載、播放音樂,一般也不會被殺掉;隱藏程序(hidden):oom_adj=7,當應用從前臺轉入到後臺後,也就成為隱藏程序了,通常一鍵清理記憶體就是清掉這些隱藏程序;內容提供者(content provider):oom_adj=14,沒有程式實體,只提供內容供別的程式去用的,比如日曆供應節點,顯然這類程序最有可能被先殺掉;空程序(empty):oom_adj=15,有些程式在程式退出後,依然會在程序中駐留一個空程序,這個程序裡沒有任何資料在執行,作用往往是提高該程式下次的啟動速度或者記錄程式的一些歷史資訊,這類程序無疑是要最先被殺掉的。
基於這樣的記憶體管理機制,Android系統中的可用記憶體並不是越大越光榮,就像在EMUI中,3G佔了一半,那也是開機啟動的服務和應用佔用了,多一點少一點並不用特別關注,畢竟Android本身就有很好的記憶體管理機制。
回覆列表
明明買的是3GB大記憶體的手機,為啥能用的只有一半?這不是EMUI自己的問題,而是安卓手機的通病。
說到剩餘記憶體的問題,先談一下安卓記憶體執行機制。通常來說,安卓運營一個App時,CPU先開始運算,然後透過記憶體快取,再來讀取App檔案執行。但當App結束時,CPU已經計算完畢,但記憶體依然有快取,也就是後臺依然有駐留。
而iPhone在執行App時,CPU開始計算,記憶體全部集中之後,才會讀取App檔案執行,App結束後,記憶體全部釋放,後臺無駐留。
所以,通常情況下,iPhone只需要2GB,甚至1GB記憶體就能很流暢。而安卓則需要大記憶體支撐,才能足夠流暢。而在可用記憶體方面,iPhone的“可用記憶體”比例,也要高於安卓。
回到開頭的問題。除了上面說到的記憶體駐留問題,安卓系統本身就是吃記憶體大戶,除了系統本身之外,各類元件、服務也都會多多少少分一杯羹。
下面以我自用的榮耀V9的記憶體介面截圖為例,過去3個小時平均記憶體使用量為3.17GB,佔比達到了57%,可用只有2.42GB。
你吃一點記憶體,我吃一點記憶體,加在一起,就形成了“3GB記憶體可用只有一半,甚至一半不到”的局面了。
不過,以榮耀V9 的6GB來說,即便剩餘可用只有3.4GB,也完全不必擔心流暢度。之前就有外媒測試,6GB記憶體對於目前的安卓手機已經完全夠用,8GB記憶體,大多時間都是浪費。
希望以上回答能幫到你。