梁靜
二十年以前,電腦愛好者都在鉆研修改DOS的配置文件,希望能夠節(jié)省出更多的低端內(nèi)存。640 K以下的空間寸土寸金,那是個(gè)小而美的時(shí)代。WinXP一開機(jī),也只有數(shù)百兆的內(nèi)存被占用;而從Win7開始,在同一臺電腦上,開機(jī)你就會發(fā)現(xiàn)已經(jīng)有數(shù)個(gè)G被占用了:
發(fā)生了什么事?這是不是微軟和Intel的陰謀呢?不對,好像沒有Intel什么事,是不是微軟和三星的陰謀呢?還是Win7和Win10又大又蠢呢?
作為陰謀論的鑒定反對者,個(gè)人一向認(rèn)為一個(gè)陰謀,如果牽扯的人數(shù)過多或者過于復(fù)雜,一定會被泄露或者失敗。這種層級的陰謀是不可能的。作為一個(gè)反例,在現(xiàn)代的Linux發(fā)行版中,例如Ubuntu中,也會發(fā)現(xiàn)一樣的現(xiàn)象。
軟件的摩爾定律
IT界有個(gè)“笑話”,叫做“無論硬件給了你什么新能力,軟件都會把它拿走”,這并不是空穴來風(fēng),軟件的內(nèi)存需求和硬件的摩爾定律走勢高度相關(guān):
造成這種結(jié)果的原因是多方面的,這里也不打算展開討論,這里僅強(qiáng)調(diào),如果硬件提供了更大的內(nèi)存,軟件總是傾向于使用它。這在很多情況下并不一定是件壞事,使用好多余的內(nèi)存,甚至預(yù)使用將來會有的內(nèi)存,曾經(jīng)幫助Google成功,也為我們提供了更廣闊的平臺。
SuperFetch
那么具體到我們這個(gè)例子,為什么Win7一開始會占用很多G內(nèi)存呢?它的原因是SuperFetch,一個(gè)從Vista就被引入的功能。
微軟發(fā)現(xiàn)我們的內(nèi)存越來越多,在開始時(shí)并沒有被很好的使用,一個(gè)新想法被提了出來。SuperFetch會根據(jù)用戶使用歷史記錄,保存一個(gè)常用軟件清單,在開機(jī)后就根據(jù)總內(nèi)存大小,將合理的一部分內(nèi)存用來預(yù)調(diào)入最常用的幾個(gè)軟件。從而大大減小軟件打開速度和響應(yīng)度,提升用戶體驗(yàn)。所以你會發(fā)現(xiàn),你的總內(nèi)存大,預(yù)調(diào)入的軟件多,內(nèi)存占用也多;內(nèi)存小,預(yù)調(diào)入的軟件少,內(nèi)存占用也少??偟膩碚f,維持一個(gè)比例。所以內(nèi)存大,不但可以打開更多的應(yīng)用,初始狀態(tài)時(shí)打開應(yīng)用程序也更快。
其他原因
不但操作系統(tǒng),軟件APP也在大內(nèi)存時(shí)代開始傾向于占據(jù)更多的內(nèi)存并提升用戶體驗(yàn)。我們那拿Chrome來說,我們開啟每個(gè)標(biāo)簽頁,每個(gè)插件和擴(kuò)展程序,Chrome就會開一個(gè)新的進(jìn)程。這樣有好處,某個(gè)進(jìn)程死了,頁面不受影響,別的頁面更不受影響,但進(jìn)程overhead消耗的內(nèi)存也是巨大的。加上Chrome會根據(jù)總的內(nèi)存大小,開啟網(wǎng)頁預(yù)加載,導(dǎo)致大量占用內(nèi)存。
用戶:我就上個(gè)網(wǎng),你就占據(jù)真么多,真的好嗎?
Chrome:我先占住了再說。
Firefox也有類似的機(jī)制。
那是不是占用這么多內(nèi)存就非常不好呢?相信沒有人愿意回去DOS那“刀耕火種”的年代,有了這么多內(nèi)存不用也不會生利息。如果你擔(dān)心開的應(yīng)用太多時(shí)內(nèi)存不夠用,那就多慮了。在內(nèi)存緊缺的時(shí)候,這些內(nèi)存會被swap出去,并不會占著不動。這種機(jī)制能提高軟件和頁面加載速度,提升用戶體驗(yàn),值得一用。