經(jīng)常用安卓手機(jī)的人會(huì)感覺到一個(gè)問題:不論我的手機(jī)的運(yùn)行內(nèi)存是512M、1G、2G、3G甚至是4G,只要手機(jī)一打開,然后隨便點(diǎn)開一些什么應(yīng)用,不一會(huì)兒就發(fā)現(xiàn)內(nèi)存就所剩無幾了。
他們這樣思考過:當(dāng)我的手機(jī)內(nèi)存是1G的時(shí)候,我經(jīng)常玩著玩著內(nèi)存就只剩200多M了,那么是不是意味著我常用的這些App大概就占用了1G-200M=800M的空間呢?如果我的常用App大概占用了800M的空間,那么,當(dāng)我換了內(nèi)存為2G的手機(jī)的時(shí)候,是不是大概就可以剩余2G-800M=1.2G的空間呢?他們懷著這樣的憧憬買來2G內(nèi)存的手機(jī)的時(shí)候,立馬就懵了,因?yàn)楦揪筒粫?huì)剩余1.2G,玩著玩著大概就剩400來M了,哭瞎?。。?/p>
所以,很多人就會(huì)對安卓手機(jī)產(chǎn)生吃內(nèi)存的印象,而不僅是吃內(nèi)存,簡直是壕無人性的無底洞吃內(nèi)存,多大的內(nèi)存都填不飽似的。想想自己玩電腦的時(shí)候,系統(tǒng)占多少內(nèi)存,每個(gè)應(yīng)用軟件占多少內(nèi)存就可以直接的計(jì)算出來,這些軟件占用的內(nèi)存都加起來就是總內(nèi)存消耗量,你啥時(shí)候關(guān)閉一個(gè)軟件,對應(yīng)的內(nèi)存嗖的就降下來了,這樣非常好理解,蘋果系統(tǒng)也類似,而安卓系統(tǒng)的內(nèi)存卻完全不遵守這樣的規(guī)律,讓人看不懂。
那么,到底為什么會(huì)出現(xiàn)這樣的情況呢?你要是直接這樣怒氣沖沖的跑去找谷歌,質(zhì)問他們設(shè)計(jì)的系統(tǒng)為什么這么吃內(nèi)存,他們的回答估計(jì)會(huì)讓你目瞪口呆,因?yàn)樗麄儠?huì)說:有內(nèi)存不用,你傻啊?懵了,有木有?完全不懂谷歌的大神們在想什么。不過不要緊,谷歌的大神們神一樣的語言聽不懂,小編用人類的語言給大家解釋解釋~

首先大家反問一下自己:為什么我們潛意識(shí)里會(huì)覺得內(nèi)存剩的越多越好?似乎如果平常我們的電腦手機(jī)只消耗了30%-40%的內(nèi)存代表著我的電腦手機(jī)性能強(qiáng)悍,似乎只有當(dāng)我還剩了一大半內(nèi)存的時(shí)候,我的手機(jī)電腦的運(yùn)行速度才會(huì)快。但事實(shí)是這樣的么?我們現(xiàn)在的設(shè)備運(yùn)行速度的快慢和剩余內(nèi)存的大小有關(guān)系么?回答這個(gè)問題之前我先來帶大家看一看一個(gè)一個(gè)普通的電腦程序在運(yùn)行的過程中到底發(fā)生了什么。
內(nèi)存的全稱叫內(nèi)部存儲(chǔ)器,既然有內(nèi)部存儲(chǔ)器那就肯定有外部存儲(chǔ)器,沒錯(cuò),現(xiàn)在電腦的主要外部存儲(chǔ)器就是硬盤。內(nèi)存和外存(也就是硬盤)的區(qū)別是:內(nèi)存的運(yùn)行速度非???,但也非常貴,CPU可以直接讀取內(nèi)存里的數(shù)據(jù);硬盤的運(yùn)行速度很慢,但是很便宜,CPU無法直接讀取硬盤里的數(shù)據(jù)。我們一般安裝程序是把程序安裝在硬盤里,點(diǎn)擊程序他開始運(yùn)行,什么叫運(yùn)行?運(yùn)行一個(gè)程序的本質(zhì)就是要開始調(diào)用CPU來處理程序的數(shù)據(jù)。但是我們的的程序都安裝在硬盤,數(shù)據(jù)也都在硬盤,前面說了CPU無法直接讀取硬盤的數(shù)據(jù),那怎么辦?那就只有先把程序運(yùn)行需要的數(shù)據(jù)從硬盤加載到內(nèi)存里,然后讓CPU從內(nèi)存里讀取需要的數(shù)據(jù)進(jìn)行處理,處理完了關(guān)閉程序之后又把內(nèi)存的數(shù)據(jù)都釋放掉,一切如舊。
從上面的過程我們可以看到,影響程序運(yùn)行速度的有CPU的質(zhì)量,內(nèi)存的質(zhì)量和磁盤的質(zhì)量,但是和剩余內(nèi)存的大小是沒有關(guān)系的,只要我這個(gè)程序的數(shù)據(jù)能夠加載到內(nèi)存里,他的運(yùn)行速度就是一樣的,跟剩余內(nèi)存是50%還是20%沒有關(guān)系。除非是這樣的情況:你的剩余內(nèi)存只剩下20%了,但是你接下來要運(yùn)行一個(gè)非常大的軟件,它要占用30%的內(nèi)存,這時(shí)候你的內(nèi)存不夠用了,程序運(yùn)行不起來了。
說到這里我們再來回想一下谷歌大神說的話?,F(xiàn)在我們知道內(nèi)存是十分寶貴的,因?yàn)樗臄?shù)據(jù)傳輸速度非常快,所以為了提高整個(gè)系統(tǒng)的效率,我們是不是應(yīng)該充分利用內(nèi)存這種高速通道?你天天讓一大半高速公路閑置著,你是交通部長你開心?你巴不得高速公路一直川流不息,而安卓系統(tǒng)的設(shè)計(jì)就是用的這種思想:內(nèi)存閑置在那里我心疼,這么高速的通道我們?yōu)槭裁床挥茫窟@就是谷歌大神說“有內(nèi)存不用,你傻啊”的原因。
安卓系統(tǒng)的程序啟動(dòng)過程和上面說的電腦程序啟動(dòng)過程基本相同,但是在內(nèi)存管理上有很大不一樣。前面說了,電腦的程序只要一退出之后系統(tǒng)就會(huì)立馬把這個(gè)程序占用的內(nèi)存釋放出來,但是安卓系統(tǒng)不這樣,安卓是這么干的:如果它檢測到你的內(nèi)存還充足,那么我退出程序的時(shí)候我不釋放內(nèi)存里的數(shù)據(jù),為什么不釋放?因?yàn)閮?nèi)存是高速通道,如果我的數(shù)據(jù)放在內(nèi)存里,那么下一次再啟動(dòng)這個(gè)程序的時(shí)候,他就不需要再從硬盤里讀取數(shù)據(jù),而是可以直接從高速的內(nèi)存里讀取數(shù)據(jù),這樣它再次起動(dòng)的速度就非常快了,充分利用內(nèi)存這其實(shí)是安卓的一大優(yōu)勢。
可能很多人也考慮到了,程序關(guān)了數(shù)據(jù)都留在內(nèi)存不實(shí)際把,那么多數(shù)據(jù)都留在內(nèi)存那內(nèi)存不撐爆了啊?沒錯(cuò),內(nèi)存一般都很小,存不了那么多的數(shù)據(jù),所以安卓系統(tǒng)會(huì)設(shè)定一個(gè)閾值,具體值是多少我不知道,假設(shè)是80%,那么當(dāng)內(nèi)存的使用量在80%以下的時(shí)候他都會(huì)把程序的數(shù)據(jù)存到內(nèi)存里,當(dāng)內(nèi)存的使用量超過80%的時(shí)候,它的系統(tǒng)就會(huì)去回收內(nèi)存的垃圾了,回收內(nèi)存的時(shí)候他有一個(gè)優(yōu)先級(jí),會(huì)先回收掉那些相對不怎么重要的的內(nèi)存數(shù)據(jù),使得你的內(nèi)存一直保存在80%這個(gè)閾值附近。
所以,這就是為什么我們經(jīng)常感覺到安卓手機(jī)內(nèi)存不夠的原因,其實(shí)它是夠的,它的內(nèi)存使用量一直徘徊在80%這個(gè)閾值附近并不代表它現(xiàn)在缺內(nèi)存,因?yàn)橹灰阏f你需要新內(nèi)存,它分分鐘給你釋放出一堆內(nèi)存出來。這種內(nèi)存設(shè)計(jì)其實(shí)是非常先進(jìn)的,在安卓早期感覺到的安卓卡頓不流暢什么的也不是因?yàn)閮?nèi)存不夠,而是有另外的原因。
所以,以后你再發(fā)現(xiàn)你的安卓手機(jī)內(nèi)存“不夠”了,別擔(dān)心,也別操心,放心大膽的用吧(轉(zhuǎn)自搜狐)



