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