如何解決安卓系統吃內存、侵佔ram的問題?
我發現安卓吃內存的問題確實存在。有圖為證。
請看圖1中的紅線所圈的地方。開機時已用空間中除了後台服務外,所佔大小僅200m左右。但是在運行了一段時間後,如圖2所示。已用空間的不可動部分已經「侵佔」了這麼多的ram,大約200m+,用安卓調諧器查看,這個時候的系統佔用多了200m左右,而內核的佔用基本沒有變化。但是我用top命令和dumpsys meminfo命令查看內存佔用情況,發現都沒什麼變化,這裡只貼出dumpsys命令的截圖。而在另一部手機的某個rom中,已用空間的不可動部分卻能始終保持不變,如圖3
。但是刷其他的rom卻無法這樣一直保持,也會出現如圖1和2中的那種情況。另外,我要說明的是,這個和精不精簡系統app等等沒什麼關係,也不是所謂的不用去管安卓的後台進程什麼的文章所要表達的內容,與總共有多少ram和機器的高端還是低端沒有關聯。我還發現,有時候在圖2中的不可動部分中會突然掉到400m左右,而後又迅速恢復這個很大的值。我百度了谷歌了很久,沒有發現解決辦法,卻看到許多人都在抱怨說,安卓機子用久了,可用ram會越來越少,我想就是上面出現的問題,即安卓系統本身會越來越侵佔ram,並使其無法被lmk清理。這個問題困擾了我很久,期盼各位大神、安卓工程師的解答,萬分感激!
搞過 android 底層的應該都懂得那部分內存是哪來的。是的,那部分是 Linux 程序佔用的內存,包含內核,驅動,C 應用程序框架,C++ API 等等所有不屬於 Java 程序的進程。
要想看到這些進程,shell 進去 ps 一下就好了。想 kill 的可以 kill ,因為這都是 Linux。
從某種程度上說,你可以把 android 理解為 Linux 之上的一個應用程序,那部分你認為吃掉的內存恰恰是 android 管理不了的部分,一般是由做 ROM 的人通過配置系統啟動腳本去控制那些C程序啟動的。
希望對題主有幫助。http://www.ibm.com/developerworks/cn/opensource/os-cn-android-mmry-rcycl/index.html給你看篇文章,其實安卓他們老大都說了,安卓沒有退出,死不死由他們來控制,本來沒什麼問題的,只是這年頭應用都想不死偷摸干點啥的,後台不死的多了,有的應用死了找各種機會起來,把界面也弄成後台的等等。用戶的內存越來越不夠了,另外大部分的應用退出都只是界面退出,裡面的後台任務非同步操作啥的都沒停。
另外java有致命弱點,大家總是死不了或者各種機會又起來,內存回收的多了,程序就卡了gc會停掉其他的操作,保證回收進行,頻繁回收內存就會很卡
android延續了Linux的內存管理機制,那就是盡量把內存用完,運行程序的的數據緩存都裝進內存里,這樣可以加快程序讀取數據。早期的android內存太小,頻繁的程序切換會使內存數據不斷讀寫,系統就會時不時的卡一下。隨著手機硬體飛速發展,動輒1G、2G的內存會讓你根本不用擔心內存還剩多少,放心用就行了。android的手機用戶一定要放棄使用Windows的觀念:認為空閑內存剩餘越多越好。利用內存和CPU之間的高帶寬加速數據傳輸,最大限度利用內存,何樂而不為呢
首先,Android的內存管理方式決定了"顯示的"內存佔用數值並不重要。系統覺得不夠了會自動kill的。
其次,吃內存現象確實存在,不僅是內核,有些app也會慢慢佔用更多內存,比如說某些系統上的設置,懷疑有內存泄漏。這個題主可以自行求證。空閑內存強迫症千萬不能有。我花了好長時間才把這個習慣改過來。Android系統的內存使用策略和其他的系統不同,當內存少於一定值的時候會自動為你清楚,所以不用擔心眼前的數值,只管好好用手機就行了,總是想著清除內存可能還會增加無謂的耗電...當你成為一個心態成熟的Androider的時候就心態平衡了。
我又一次特地切換到電腦來回復這個問題。我這次談談解決的辦法,對手機那顆火熱的心進行降溫,讓大家都能感受到冬天般的寒冷。
==============我是萬惡的分割線===============現在談談準備工作:1. 要有一個大致懂得手機的人,會用基本軟體操作。
2. 有個火熱的手機,溫度要燙手的,不燙手不動手。該手機要root過的。3. 下載倆軟體1自啟管理2「system monitor」==============我是珍貴的分割線===============
前方高能請心臟不好的注意:本人不對有此引發的各類疾病和併發症負責,也不對因此產生的懷孕等負責敬請知曉。(責任成功免除)萬事第一步:備份你的手機里重要的資料和文件,通訊錄,簡訊,聊天記錄等等。由於涉及系統內容,資料丟失的可能性還是有的。 我今天操作的時候由於關閉了不該關閉的系統服務,導致通訊錄的丟失。但是還好,最後被我找回了。但是我不保證在你的手機上也能找回。所以請先備份。==============我是萬惡的分割線===============
下邊正式開始教程。話說這個安卓手機啊,真的長的不像蘋果,首先不能吃,其次維生素含量也不行,簡直沒有營養。但是有一個好處就是暖手。偶爾燙手,可以用於足療,SPA,洗浴中心等行業。
我的介紹完了。886俗話說,有耐心的人才能成大事。下邊我們就正式開始辦大事。==============我是簡單的分割線===============
過程真的很簡單,就是有點費時間。a。首先開啟 system monitor,這個系統監控軟體有個好處,他可以看到cpu的佔用,cpu佔用大的程序會導致手機發熱。用心默默記下頭幾個佔用大的軟體待處理;b。該軟體還有個好處就是有個懸浮窗,開啟懸浮窗後可以看到cpu佔用,等到開啟某個程序看到佔用增大的時候,可以雙擊懸浮窗,看看此時是哪個程序佔用你大量cpu;用心默默記下待處理;c。去系統設置-電源管理那裡,看看最近耗電統計,找到耗電量最大的程序,用心默默記下;d。現在開啟 自啟管理 這個軟體,需要你有root許可權,否則不能對rom自帶的程序進行管理。e。用心對比剛才記在心裡的那幾個程序,找到你最恨的那幾個,用心默默記下。
f。自啟管理里分兩部分,一個是開機啟動列表,一個是後台服務列表,可以通過最左上角里的圖標後出現的菜單中切換。下邊我分開說。g。自啟管理中:g1.在用戶安裝中,關閉大部分的平時不常用程序,保留各種通訊程序,常用程序;g2.在系統預設中,關閉大部分系統自帶的oem程序(比如華為手機自帶的華為的程序,索尼自帶的亂七八糟的不用的程序,水貨手機會有國外運營商附贈的程序等)這裡邊也有好同志,你要用的話就保留他們。h。後台服務中:h1. 在用戶安裝中,關閉大部分程序的後台服務,因為有很大概率的情況下後台服務關閉了不影響程序的正常運行的。(1.知乎程序例外,要把知乎的第一個服務開啟,否則會閃退)當然,你常用的程序,還有通訊相關程序如微信啊什麼的後台最好不要關。不排除有部分猥瑣的程序的後台服務是偷取你的使用隱私位置隱私偷偷走你的流量發回自己的伺服器再轉手賣掉的,也有用來研究你的使用習慣然後在給你推送廣告的。淘寶的後台有35個服務,真不知道要遮么多幹嘛,我帶回跟阿里巴巴的產品經理好好談談。h2. 在系統預設中,關閉剛才提到的程序的後台。但是注意不要關閉通訊錄相關的,google相關的,你不認識的全是字母的看起來高大上的。這裡邊自帶的廣告是要關閉的,尤其是你刷的是定製rom的話,一般都會帶一些後台數據或者廣告推送的。i。基本到此就完成了,但是你要先拜拜上帝耶穌佛祖,清理下自己緊張的心情,然後用不再年輕不再顫抖的手,重啟你的手機。j。有可能你需要恢復出廠設置或者重新刷機了,這就是我剛才讓你備份的重要性。k。如果你到這步,說明你已經成功重新開機了。請先使用一段時間,如果仍然發熱,請重複以上步驟。 我的手機是一次成功,熱了好多天後,現在把手機拿在手裡的感覺是冰涼的。成功的同學請跟我一起唱,夜風已冷 回想前塵如夢 心似冰凍 怎堪相識不相逢~~~
l。如果你服務關閉的太多,可能會使用中遇到問題的。所以請謹慎。我也是自己根據經驗來的,沒有既定的規律。m。內存佔用此時不再重要了,因為沒有那麼多程序可以被預讀取了。也沒有那麼多服務開啟了。你已經體會到了秒開的感覺了。我是四核處理器,現在也常能看到三個核心待機處於關閉狀態,只留下一個核心運行,而且常常還是降頻運行狀態了。n。google play裡邊有200多個後台服務,這個不要關閉,他本身佔cpu很少的,內存佔用也很少。o。自啟管理操作的時候反映有點慢,這個比較費時間。p。其實以上過程可以總結為一句話,把不需要開啟的關閉掉。886===========以上為解決方案,以下為吐槽,我本人是分割線==================我特地切換到電腦來回復這個問題。說明我的態度是認真地, 我不是安卓程序猿,我可以不專業,但是我是一個專業的安卓手機用戶,我站在用戶的立場上來談論這個問題的。==============我是萬惡的分割線===============此處引用其他回復的說法:
「{1. android延續了Linux的內存管理機制,那就是盡量把內存用完,運行程序的的數據緩存都裝進內存里,這樣可以加快程序讀取數據。2.隨著手機硬體飛速發展,動輒1G、2G的內存會讓你根本不用擔心內存還剩多少,放心用就行了。3.android的手機用戶一定要放棄使用Windows的觀念:認為空閑內存剩餘越多越好。利用內存和CPU之間的高帶寬加速數據傳輸,最大限度利用內存,何樂而不為呢4.Android系統的內存使用策略和其他的系統不同,當內存少於一定值的時候會自動為你清楚,所以不用擔心眼前的數值,只管好好用手機就行了,5.總是想著清除內存可能還會增加無謂的耗電...當你成為一個心態成熟的Androider的時候就心態平衡了。}」===================我是分割線,這年頭做分割線也要講專業講良心================
讀了上面的這麼多的回復,我的感覺是,以上的親們,你們用的都是蘋果吧。你們賣了多少個腎了?
我手邊放著一個發熱的安卓手機,在這個寒冬里,他用他的溫度溫暖了自身,溫暖了桌面,沿著桌面把溫度傳達到我的手腕,也溫暖了我的內心。我不禁打開手機一看,你妹妹的現在上午十點半, 我一大早充的電到現在就剩下百分之二十了。你妹妹的你應當把電用在正地方啊。===========================================================
我下面批判一下安卓的內存機制。1. 不是所有的程序都是天天用的,這樣的程序也有必要每天預讀取到內存里么?很多自帶的程序我把手機用成廢品也不會開一次,這樣的程序在你使用手機的光輝歲月里每天都要預讀取一遍進入你的手機內存,這難道不是對電的浪費?對資源的浪費,無端的增加了宇宙的嫡,加速了人類和宇宙的滅亡么?2. 動輒1個G兩個G的內存夠用么? 我手機就是2G內存的800的處理器按說速度也不慢了吧。但是打開個程序要等半天, 還會死機。我想說的是真是站著說話不腰疼。內存都占完了,新開程序肯定要鬥爭,這能不慢么?3. 放棄windows內存使用的觀念的童鞋,如果系統不會無端變慢,無端發熱的話,作為用戶,一般是不會關注內存使用情況的。 當主動去看內存使用的時候,肯定是系統慢了才會去看內存佔用的。這個先後順序你懂么4. 我不多說了,電池一會兒就用完,手機可以當做暖手寶,你叫我怎麼好好的用好手機就行了啊親。 差評。5。清除內存會增加無所謂的耗電。我對你只能呵呵。 我覺得現在的我已經不再關注是否耗電了,手機是用的嘛,耗電無所謂德嘛。 我現在關注的是手機是否燙手的問題好嗎親。冬天幫我省了一個暖手寶了啊。好幾千一個暖手寶啊===========================總結分割線====================
做程序猿啊,要有程序猿的專業態度,別輕易的把用戶都看做小白。我相信google的工程師都是天才,但是我也相信google工程師裡頭所有的人未必都是天才。google的內存管理機制未必都是最好的。希望你們作為一個程序員別輕易的相信別人說什麼你就說什麼。要先過過自己的腦子,要學會尊重事實。不要太浮躁。
其次google內存佔用不合理的目的之一是增加硬體壓力,讓大家都去買新手機。我個人推測啊,不一定都對。畢竟在商言商。所以千萬別聽風就是雨。我覺得在android盛行的今天,軟體相差無幾,最終拼的還是硬體,內存容量和處理器效率越來越恐怖了,所以吃內存的問題也不是什麼問題了。
除了換個大內存手機無解。。。的確3g運存才可以用了
這個好像不必糾結,只要你的手機能順暢運行就好了,如果吃內存影響你了,在解決他
推薦閱讀:
※Android 開發時,如何實現和伺服器的數據同步 ?
※Android Studio連接真機沒反應?
※Android開發中,有哪些讓你覺得相見恨晚的方法、類或介面?
※Android開發中,如何有效解決ScrollView和ListView衝突?
※關於 Android,用多個 activity,還是單 activity 配合 fragment?