64 位 Windows 7 系統。以前 2G 內存,不開程序基本佔用 800M 左右;現在又加了 2G 內存,不開程序基本佔用1.5G。為什麼會增加?


一般都是被操作系統用作了磁碟緩存。和常識相反,空閑的內存是一種浪費。內存需要實際利用起來才有價值。操作系統通常會把部分空閑的內存用來緩存磁碟上的內容,因為磁碟 I/O 是現在個人電腦上最慢的部分(僅次於網路)。其他應用程序需要申請更多內存時操作系統才會通過一定的演算法將磁碟緩存佔用的內存釋放出來。

Windows 和 Android 上不少所謂『清空內存』的應用其實是在和操作系統的性能優化唱反調幫倒忙……


補一張圖給 @Rio 吧

下圖中任務管理器顯示內存佔用是 5.4 GB ,但實際上真正佔用的只有 4789 MB ,黃色的那部分 「已修改」 也被算作了正在使用了。

  • 綠色的 使用中 ,表示當前確實在用,實實在在的佔用的內存。
  • 黃色的 已修改 ,即是 @Rio 所說的磁碟緩存,也是實實在在在用的。這個用的越多,理論上從磁碟中取數據的操作會越少,電腦也就越快。
  • 藍色的 備用 ,是從 Vista 開始引入的 Superfetch 技術的產物,具體介紹詳見英文維基 http://en.wikipedia.org/wiki/Windows_Vista_I/O_technologies#SuperFetch,中文版的就看百度百科吧 http://baike.baidu.com/view/1671594.htm 。這部分內存,確確實實在用,但如果有需要可以立即被釋放。
  • 淺藍色的 可用 ,是真真正正閑著的,啥都沒存的內存,沒錯,就那麼小一點兒。不過黃色部分和藍色部分都是動態調節大小的,所以一般不會有問題。

補充一下黃色和藍色部分的區別吧:

黃色部分準確的來說指的是傳統意義上的磁碟緩存,這裡只存放 「曾經用過」 的數據,也就是說這裡的數據都是 「留下來」 的 。

藍色部分其實也是磁碟緩存,但這裡存放的數據是 Windows 「猜你想要」 的數據,也就是說這裡的數據都是 「取出來」 的。

兩者相比較,後者的重要性顯然低一些,所以當需要內存的時候,後者會比前者更先釋放掉。

---------------2012-04-18 補充:

評論中 @馮東 提出了不同的看法

解釋得有問題:

綠色:從磁碟中讀取到內存中,並且被使用。但是讀取到內存之後沒有修改。一旦內存不足,這部分可以直接挪作它用,不必寫回磁碟。

黃色:從磁碟中讀取到內存中,或者被 app 新申請的內存(比如經過 memset 清零),被使用。並且其內容被修改過(新申請的都視為被修改過)。一旦內存不足,這部分內容必須 swap 到磁碟上(不包括進程被 kill 時)。黃色的多寡不代表磁碟操作的頻繁程度。如果內存沒有底到一定限度,系統對待黃色和綠色的行為是一樣的(沒有引發 paging out)。黃色的也不是 @Rio 說的緩存,藍色才是。

藍色:操作系統預測 app 馬上會用到的磁碟數據(一般是可執行文件的某部分)。

黃色和綠色都是任何 paging 系統必有的,它們的多少只和 app 的行為有關(除非引發 paging out,這時 swap 黃色的哪部分由系統決定)。藍色才是 Vista 之後多用的內存部分。


我也是來補充的。先說說中文Windows某些蛋疼的翻譯。正在使用(active)是對的 ,已緩存(cached)就忍了,備用(Stand By)是個什麼東西?是「好了等著」的簡稱么?

不過討論內存的時候用任務管理器什麼的都弱爆了,微軟有出一套神器,Sysinternals Suite,裡面有一個RAMMAP是專門看內存的分配的。

上圖是RAMMAP運行之後的展示,Windows對內存還是分的挺細的,各項的具體內容可以參考這裡:http://blogs.technet.com/b/askperf/archive/2010/08/13/introduction-to-the-new-sysinternals-tool-rammap.aspx

不過有幾點不太對。

沒有文獻表明Active的部分會被優先使用,所以直接挪作他用的說法不太對;

Standby的部分並不完全用於Superfetch。Mapped File中預先mapped到內存中的文件不僅僅有應用程序、dll,還有很多系統猜測你可能會使用的圖片、文檔、壓縮包等文件;

Unused的部分並不是全部都可以被立刻使用。只有Zeroed的部分是可以的,Free的部分還有臟數據沒有銷毀,不會被立刻使用。

RAMMap下載地址:

http://technet.microsoft.com/en-us/sysinternals/ff700229

參考:

http://blogs.technet.com/b/askperf/archive/2010/08/13/introduction-to-the-new-sysinternals-tool-rammap.aspx


謝邀

@Rio 說得不錯

Windows 6.0 以上版本(Vista 開始),開機後空閑內存看時似少了許多,但這是系統根據用戶使用情況有意識地將自身以及其他訪問概率較高的數據載入內存所致。相對其前輩(2000/XP/2003),系統的內存管理能力及效率實質上有了極大改善。


才發現被邀請了,又同時發現目前頂樓的觀點並不準確,所以我說兩句。

首先,大家要看圖:李卿,http://qing.li 的那個圖,知道有綠色區,橙色區,藍色區。

有的人說,因為 Windows 會預載入磁碟內容,佔用內存大小按比例來,所以你 4G 內存佔用會更多,這個說法不正確。

為什麼?我們看到,預載入的內容位於藍色區域,而藍色區域是不計算入已經佔用的內存區域的。所以,藍色區域確實隨著你系統總內存的增加而增加,但藍色區域不被顯示為已經佔用的內存,因而不會影響你看起來的內存佔用。

藍色區域佔用的內存確實越多越好,但你要想讓藍色區域佔用更多內存,一個重要的事情就是使橙色跟綠色區域儘可能小,而你系統顯示的內存佔用其實就是綠色區域加上橙色區域,那麼換句話說,即便是在 Win7 下,你系統顯示的內存佔用仍然是越少越好

至於橙色區域,至少在不開應用程序的情況下,在剛開機的情況下,它一般是穩定的,不會隨著系統內存的增加而憑空增加。

所以,如果你『不開程序佔用 1.5G』那通常大概率是說明綠色區域增加了,換句話說就是真的有程序實實在在的佔用了更多的內存。

那麼你應當做什麼事情?

答案是查自啟動。查查有什麼程序開機自動啟動佔用更多內存了。Windows 要實現自啟動的方法跟後門實在太多,我所知道的就有:系統服務,驅動程序,註冊表項目全局自啟動,註冊表項目當前用戶自啟動,桌面啟動組自啟動,IE瀏覽器擴展自啟動,定時任務啟動,等七種。——現實中還有更多。

所以有些時候裝個 360 真的不全是壞事,至少審查自啟動這個功能就會很有用。

至於 Rio 的觀點:『清空內存』的應用其實是在和操作系統的性能優化唱反調幫倒忙。——在我看來也不準確,同樣因為區域問題。如果清空內存的目標是綠色區域,那麼他通常是有益的,只有清空藍色區域才有害。——因此,那些性能優化是否真的是幫倒忙,取決於它能清掉綠色區域還是藍色區域。而不能因為藍色區域的存在,就一味的認為所有清空內存的應用都沒意義。


這個問題的答案其實很簡單:這種情況源於我們Win 7設計理念的改變!

通過xp系統和win7系統使用的比較我們會發現:xp系統的內存使用量會隨著所打開應用程序的增多而增加;win7的內存使用率則往往從一開始就會比較高。這是為什麼呢?

我們都知道,計算機在內存上的讀寫速度要遠遠高於硬碟。但是因為我們計算機的內存有限(內存太小,遠遠小於硬碟,不能滿足我們的存儲需求)且數據斷電丟失等原因,我們又不得不把應用程序寫入硬碟。這樣對於計算機而言,提高內存的使用率,就意味著更快的運行速度和更高的運算效率。所以我們的win7系統一改xp時代的設計理念:在保證所執行程序的正常運行下,提高了內存的使用量(這樣空閑內存相對減少了,內存的使用效率自然就提高了)。其方法是:在系統正常運行的情況下,從硬碟上讀取一些我們常用的程序,載入到內存,當我們用到這些程序的時候,就可以迅速的運行,從而提高了運行的速度和效率!

這就是你內存使用量上升的原因。你說呢?


在Linux系統中,有一項設置可以決定物理內存的優先使用級別(swappiness,ubuntu下默認值60,範圍是0到100)。當swappiness=0時,就會最大限度地利用物理內存,否則即使物理內存沒有耗盡,也會使用一部分swap來替代。

實際上,物理內存通常是不夠用的,我們總是要使用swap。

你所說的情況,也許是一種類似的機制。


這是win7和XP不同的地方,WIN7有內存預載入功能,預載入的佔用內存的大小按比例來的,不是按大小來的,你原來2G內存佔用800M,現在4G內存佔用1.5G,這不是正常嗎。


pansz 正解。其他都是胡扯。喵喵~


推薦閱讀:

Windows10進程內存佔用巨高如何解決?
win7開機啟動項的啟動是在輸入賬戶密碼之前還是之後?
如何評價上海交通大學陳海波教授加入華為?
使用 Mac 系統時有哪些優雅快速的操作習慣?
魅族 MX2 的 Flyme 2.0 是個什麼系統?

TAG:個人電腦 | 操作系統 | 計算機 | 硬體 | 內存RAM |