windows內存足夠的情況下為什麼應用程序需要虛擬內存?

我百度了下好像虛擬內存是必須得作為一種交換機制,為什麼?為什麼內存足夠的情況下還需要?就像圖中,內存才使用60%就說內存不夠?已提交9.7GB,這些都是什麼情況?


你內存是8G的,剩餘3.4G,如果程序要求個4G,那不就不夠了嘛。另一種情況是32位程序,要的內存不能超過3G。即便總的內存夠也不行。還有一種情況是內存碎片太多,以至於分配不出一整塊的需要大小的內存。還有一種情況是程序bug。

你在運行質量效應仙女座,那要求的最低配置就是8G。


虛擬內存不是交換文件的一種機制。它是保留物理內存的一個機制,允許應用程序看起來能夠用比物理內存+交換文件更大的內存地址空間。比如一個C++程序向CRT請求分配一個100K大的內存,CRT會向操作系統保留1兆(VirtualAlloc+MEM_RESERVE),這100k就是被確認了的內存(MEM_COMMIT),這樣下次應用再請求100K,CRT就是直接在已經保留的這1兆內存里直接再確認出100K來。這個在需要連續的內存地址的時候很有用。比如一個稀疏矩陣,保留的內存可以上G,但是確認的內存可以只有幾K。

一個Windows系統中能夠確認的內存的上限是物理內存+交換文件大小,因為已經確認的內存是在這些物理存儲裡面保存的。已確認的內存和上限太接近就會出現題目中的警告。因為有很多程序發布之前並沒有經過很好的壓力測試,在內存確認失敗的時候可能有數據丟失等故障出現。

確認過的內存只有在被訪問之前才會分配物理存儲。如果一個應用程序確認了內存之後從來沒有用過這塊內存(這時候作者其實應該用MEM_RESERVE而不是MEM_COMMIT),那麼系統的可用內存並不會減少。這也造成在可用內存還有很多的時候可能就會有內存確認失敗(相當於倉庫里有貨但是貨都有主了所以顯示售罄)。至於是哪些進程確認了內存卻不用,你可以在任務管理器的詳細資料裡面去看。

出現這個問題,說明應該增加交換文件大小了。

順便說一下,關閉內存交換文件通常是降低性能不是提升。畢竟你不能指望第三方軟體在內存使用的效率上普遍超過微軟的程序員。開啟交換文件可以把那些內存使用效率較低的程序的內存佔用踢到交換文件裡面去(比如開了很大的緩衝區又沒有用),把物理內存給那些內存使用效率較高的程序用。


因為windows進程間共享數據是用內存映射文件實現的,包括RPC、COM、OLE、DDE、DDE、WINDOWS消息、剪貼板、套接字等最底層的機制就是內存映射文件。

所以要是不用業交換文件來實現進程間通信難道用臨時磁碟文件實現嗎


已經有的幾個答案介紹了關於虛擬內存的坑

而題主的內存確實說不上大,比如內存碎片,單個程序申請了大量內存的可能性都是有的

但是還有一種可能

那就是句柄太多了

我的電腦有64G內存,虛擬內存1G(用來內核轉儲),在使用率不到15G的時候也有出現過內存不足的問題

更悲慘的是程序會隨機自動關閉,新窗口都無法創建

有些程序會有句柄泄露,我的機器上超過120萬個句柄的時候就會出現這個癥狀

任務管理器的性能標籤頁的CPU頁面下能看到總句柄數,詳細標籤頁的頂欄點右鍵,選擇「選擇列」可以顯示每個進程的句柄數量,Windows 10在正常情況下句柄數量一般在10~20萬左右

比如,Microsoft Photo我不知道是內存泄漏還是設計如此,在一直開著圖片不關閉的情況下,內存佔用會一直上漲,不會停止,而RuntimeBroker的句柄數量則會隨之上漲,我這裡突破過30萬還是50萬句柄來著,外加一些其他的泄露程序(比如我常用的奇游加速器……),句柄突破120萬之後我的系統幾乎是崩潰狀態……


題主你還沒有搞清楚頁面文件(交換空間)與虛擬內存的正確含義,我想你是想表達,為什麼大內存還要設置頁面文件?

事實上,大內存根本無需設置頁面文件,尤其是大於8G的情況下,頁面文件是以前內存小的一個不得已的解決方案,用硬碟的一塊空間來當作內存使用。

操作系統把處於不活躍的進程所佔用的內存頁保存到硬碟上,留出更多的內存給活躍的進程使用,這樣做的後果就是,由於硬碟速度很慢,尤其是機械硬碟,使得當這些不活躍的程序激活的時候,操作系統需要大量讀寫硬碟,造成系統響應速度嚴重下降!

如今內存容量已不再是瓶頸,題主應該仔細看看是哪些用不上的進程佔用了寶貴的系統資源,及時清理後台資源,把有限的資源用在正在使用的程序上才是硬道理。

頁面文件可以一時用來救急,如果你一直需要開啟頁面文件,那麼就應當考慮增加物理內存,並在物理內存足夠的情況下關閉頁面文件,否則你的靈感將會消失在系統的卡頓和等待中!


虛擬內存可以說是兩個不同的概念。

從編程的角度來說,每個應用程序運行在獨立的定址空間,由操作系統通過頁表機制,映射到真正的物理內存上邊。程序請求內存時,如果請求不到指定大小的連續內存,就會報錯。題主的問題應該就是這種情況

另一種概念是交換文件,也就是Linux swap的概念。內存訪問速度快,但容量有限的,操作系統會把暫時用不到的內存數據,以文件的形式寫到硬碟,節省的空間用來存儲更多的必要數據。虛擬空間可以提高使用體驗,但是有一種情況要注意,如果應用程序運行需要5G的內存,而機器只有4G內存,操作系統需要不停的將數據在內存和硬碟之類寫入寫出,體驗很差。

結論是,能加內存加內存,能上固態上固態。


請打開虛擬內存。。。

不要相信那些過時的、甚至有些是站不住腳的「優化技巧」


不要相信網上說的SSD優化方法為了壽命關閉虛擬內存,老老實實開虛擬內存吧,我曾經也干過這種事(逃


我的物理內存16G。

如果我不禁用虛擬內存,那麼系統會自動給分配大概是物理內存大小的虛擬內存,也就是佔用16G硬碟空間。

所以我禁用了。

經過一段時間的日常使用,沒感覺到有任何問題。

也遇到過一次 「內存不足」 的提示,結果發現是explorer在搜索文件的時候佔用過多內存,大概有12G,而且還在不斷增長,恐怖吧?

停止了這次搜索,內存就降下來了。

如果不是這次的內存提示問題,我大概會一直搜索下去,也許虛擬內存會全部用上也不夠?

綜上所述,我認為禁用了更好。內存不足的問題不可怕,更可怕的是內存無限。大不了,你需要時候再打開。


內存如果充足,可以不用paging file

參考微軟官方說明 https://support.microsoft.com/en-hk/help/2160852/ram--virtual-memory--pagefile--and-memory-management-in-windows

Users frequently ask "how big should I make the pagefile?" There is no single answer to this question because it depends on the amount of installed RAM and on how much virtual memory that workload requires. If there is no other information available, the typical recommendation of 1.5 times the installed RAM is a good starting point. On server systems, you typically want to have sufficient RAM so that there is never a shortage and so that the pagefile is basically not used. On these systems, it may serve no useful purpose to maintain a really large pagefile. On the other hand, if disk space is plentiful, maintaining a large pagefile (for example, 1.5 times the installed RAM) does not cause a problem, and this also eliminates the need to worry over how large to make it.


樓上對題主問的為什麼明明內存卻提示內存不足描述的挺詳細了,這裡做一點背景知識的補充:關於使用虛擬內存原因,不管是windows還是任何現代操作系統都類似:

1. 簡化程序的內存管理,每個程序都認為自己擁有全部的內存;

2. 實現page cache,提升程序的運行速度。

具體可以參考一下這本書中關於virtual memory的部分,介紹的很詳細:

Computer Systems: A Programmer"s Perspective, 3/E (CS:APP3e)

Randal E. Bryant and David R. O"Hallaron, Carnegie Mellon University


結論:當關閉虛擬內存時,剩餘給新程序可使用的內存數=「可用」內存+「備用」內存可釋放的部分。

問題中的情況分析如下:

當關閉虛擬內存時,所有數據都在RAM上。

只有「可用」內存是所有可用的,不包含任何有價值的數據。

「備用」內存是程序的緩存,當「可用」內存用完後,可以進行釋放,但只能釋放一部分。


不光是交換機制,還提供了一種統一的抽象來管理整個內存。交換頁到硬碟只是其中一個功能而已,詳細看操作系統課本。


推薦閱讀:

電腦加裝固態硬碟後,系統重裝好還是遷移好?
Windows 為什麼可以兼容那麼多不同電腦的不同的硬體?
關於內存管理(虛擬內存的分段與分頁實現),Intel Pentium完成哪些功能,Windows/Unix OS完成哪些功能?
如何看待微軟向沒有預約過的 Windows 7/8 用戶推送、後台自動安裝 Windows 10?
離線的Windows平台下,有什麼軟體可以集成「待辦」、「日程」以及「筆記」?

TAG:MicrosoftWindows | 內存管理 | 電腦硬體 |