
因此,出於好奇,我決定查看執行 Windows 7 VM(分配了 3 GB RAM)時的 RAM 使用情況。我很驚訝地看到結果,我想知道為什麼這些結果是這樣的:
我的主機(win 8.1)任務管理器顯示以下內容:
這實際上只顯示了 Chrome 有多大……無論如何,請注意 VirtualBox 管理器僅使用 75 MB 的 RAM。嗯,有道理,畢竟這只是主管而不是虛擬機器本身。但是等等,這些數字(即使您將看不到的數字加起來)也不會等於當前的 RAM 使用量(「效能」標籤中報告的 9 GB)。鑑於我的客戶電腦現在使用 1.5 GB,人們會期望它在清單中的位置更高一些...
好吧,讓我們嘗試一個不同的工具:RAM映射表
首先,再看兩張 RAMMap 的截圖:
好吧,「進程私有」的部分看起來大約是 3 GB(除非我粗略地看了一下,差距是一個數量級),但仍然——除了 Chrome 佔用了超過 100 MB 的 RAM 之外。
哦,嘿,看看這個:
看來我終於找到它在哪裡了……但這是什麼? VBox 是否將訪客的 RAM 視為只是不斷載入到 RAM 中的檔案?這是……完全不同的東西嗎?為什麼 Windows 不在其常規任務管理器工具中通知我這一點?
TL;DR:Windows,你沒有顯示所有 RAM 使用情況
答案1
它顯示在 RAMMap 下驅動程式已鎖定。查看您指派給虛擬機器的 3GB 使用情況。
VM 使用此內存,因此其他工具無法使用它。
答案2
TL;DR:該進程正在使用內存,停止使用內存,Windows 只是懶得處理它。
Windows 不會在進程下的任務管理器中顯示 RAM 使用情況,除非進程要求 RAM 並對其使用有一定的控制。如果作業系統將 RAM 提供給進程來支援映射,而這些映射是可丟棄的,那麼顯示它們對進程負責將會令人困惑。這將導致一個進程的使用數量變化很大,因為其他進程導致這些映射變得不受支援。
您沒有什麼特別的理由應該關心 Windows 碰巧為這個進程提供了 2GB RAM,不是因為它請求它,而是因為它想不出更好的方法來處理該記憶體。當然,如果 Windows 確實與記憶體有其他關係,則可以隨時收回該 RAM。
如果進程實際使用內存,它將被視為其工作集的一部分併計入進程。如果 Windows 現在清理內存,並且該進程稍後使用該內存,則 Windows 只需要再次分配它。因此,現在做額外的工作很可能是為了以後做更多的工作,這是沒有意義的。