為什麼 Windows 會終止進程或不允許它們分配更多內存,即使有一些空閒 RAM

為什麼 Windows 會終止進程或不允許它們分配更多內存,即使有一些空閒 RAM

這個問題緊接著上一個問題如何精準分析Windows 7記憶體使用量?

為什麼在一個真實進程只佔用大約40% 物理內存(私有工作集)並且其餘部分被操作系統以某種方式神秘地佔用的系統上,即使仍然有大約800MB 的歸零內存,內核也不允許進程分配更多內存記憶?

記憶

是否可以更改核心設定以便可以利用 100% 的操作記憶體?現在,在任務管理器中,當我達到記憶體使用率的 80% 時,核心的行為就像是 100% 一樣,因為這是應用程式開始崩潰並且無法分配記憶體的邊緣。如何釋放這 20% 以便我可以 100% 利用我擁有的所有記憶體?為什麼這 20% 是「保留」的?系統是windows 7 64位,總共4GB RAM。出於性能原因,交換被禁用。 (硬碟速度非常慢且啟用交換使電腦幾乎無法使用)

答案1

私有工作集不是進程的整個記憶體:

私有位元組、工作集、虛擬大小

虛擬大小是程式運行可能需要的記憶體總量。許多程式不會使用分配給它們的所有虛擬內存,但它們會請求虛擬內存以確保它們有足夠的空間來執行您請求它們的任何操作。它也用於記憶體映射檔案和其他更容易作為記憶體執行的操作(共享記憶體空間,IPC),但與請求私有記憶體的進程沒有嚴格關係。

為了使其工作,作業系統必須:

  • 為記憶體的可用提供保證
  • 拒絕記憶體請求(大多數時候,這會在應用程式崩潰/退出時返回)

通常,系統會將這些未使用的虛擬記憶體分配到頁面檔案中,然後只有實際使用的部分才會佔用實體RAM。但是,透過停用頁面文件,您將強製作業系統使用實體記憶體來提供這些保證。這意味著您最終會得到大量無法分配給其他進程的歸零記憶體頁。

當您有頁面檔案時,進程只需要介於Working SetPrivate Bytes物理記憶體量之間的某個位置。當您停用分頁檔案時,Windows必須為其分配全部Virtual Size內存量,或拒絕內存請求。 (在Windows的資源監視器中,這是這一Commit列,因為Windows是承諾進程的虛擬記憶體量。

答案2

資源監視器應該會顯示您是否確實有任何可用記憶體。

資源監控器

另請參閱在 8GB RAM 機器上刪除頁面檔案有什麼好處或壞處?

相關內容