01.26 為什麼現在的電腦都這麼吃內存?

為什麼現在的電腦都這麼吃內存?

二十年以前,電腦愛好者都在鑽研修改dos的配置文件,希望能夠節省出更多的低端內存。640K以下的空間寸土寸金,那是個小而美的時代。WinXP一開機,也只有數百MB的內存被佔用;而從Win7開始,在同一臺電腦上,開機你就會發現已經有數個G被佔用了:

為什麼現在的電腦都這麼吃內存?

發生了什麼事?這是不是微軟和Intel的陰謀呢?不對,好像沒有Intel什麼事,是不是微軟和三星的陰謀呢?還是Win7/Win10又大又蠢呢?

作為陰謀論的鑑定反對者,我一向認為一個陰謀,如果牽扯的人數過多或者過於複雜,一定會被洩露或者失敗。這種層級的陰謀是不可能的。作為一個反例, 在現代的Linux發行版中,例如Ubuntu中,你也會發現一樣的現象:

為什麼現在的電腦都這麼吃內存?

那這些內存都被拿去幹了什麼呢?

軟件的摩爾定律

IT界有個“笑話”,叫做“無論硬件給了你什麼新能力,軟件都會把它拿走!”,這並不是空穴來風,軟件的內存需求和硬件的摩爾定律走勢高度相關:

為什麼現在的電腦都這麼吃內存?

臺式機操作系統內存需求量和Intel晶體管數目走勢圖

為什麼現在的電腦都這麼吃內存?

服務器操作系統內存需求量和Intel晶體管數目走勢圖

造成這種結果的原因是多方面的,這裡也不打算展開討論,留待將來細談。這裡僅僅強調,如果硬件提供了更大的內存,軟件總是傾向於使用它。這在很多情況下並不一定是件壞事,使用好多餘的內存,甚至預使用將來會有的內存,曾經幫助google成功,也為我們提供了更廣闊的平臺。

SuperFetch

那麼具體到我們這個例子,為什麼Win7一開始會佔用多大數G內存呢?它的原因是SuperFetch,一個從Vista就被引入的功能。

微軟發現我們的內存越來越多,在開始時並沒有被很好的使用,一個新想法被提了出來。SuperFetch會根據用戶使用歷史記錄,保存一個常用軟件清單,在開機後就把根據總內存大小,將合理的一部分內存用來預調入最常用的幾個軟件。從而大大減小軟件打開速度和響應度,提升用戶體驗。所以你會發現,你的總內存大,預調入的軟件也多,內存佔用多;內存小,預調入的軟件也少,內存佔用少。總的來說,維持一個比例。所以內存大,不但可以打開更多的應用,初始狀態時打開應用程序也更快。看來錢多就是好啊!

其他原因

不但操作系統,軟件app也在大內存時代開始傾向於佔據更多的內存並提升用戶體驗。我們那Chrome來說,我們開啟每個標籤頁,每個插件和擴展程序,Chrome就會開一個新的進程。這樣有好處,某個進程死了,頁面不受影響,別的頁面更不受影響,但進程overhead消耗的內存也是巨大的。加上Chrome會根據總的內存大小,開啟網頁預加載,導致大量佔用內存:

為什麼現在的電腦都這麼吃內存?

用戶:我就上個網,你就佔據真麼多,真的好嗎?

為什麼現在的電腦都這麼吃內存?

Chrome:我先佔住了再說

Firefox也有類似的機制。

結論

那是不是佔用這麼多內存就非常不好呢?相信沒有人願意回去DOS那刀耕火種的年代,有了這麼多內存不用也不會生利息。如果你擔心開的應用太多時內存不夠用,那就多慮了。在內存緊缺的時候,這些內存會被swap出去,並不會佔著不動。這種機制能提高軟件和頁面加載速度,提升用戶體驗,何樂而不為?


分享到:


相關文章: