Windows 記憶體的深層(第2回) ── 實體頁面的一生:五份清單與分頁檔的真相

· · Windows, 記憶體管理, 分頁檔, Working Set, Standby, RAMMap, 效能監視

上一篇「Windows 記憶體的深層(第1回) ── 虛擬位址變成實體 RAM 的瞬間」追到,第一次碰到已 Commit 頁面時,頁面錯誤處理常式如何配置實體頁面。那麼,這張實體頁面離開 Working Set 之後會去哪裡?

常見說法是「被趕到分頁檔」,但前後其實還有好幾種狀態。未修改的頁面可以帶著內容移到 Standby。已修改的頁面會先在 Modified 等待寫回。重用時可能經過 Free 或 Zeroed;若再次需要同一份內容,也可以從 Standby 以軟性錯誤回來。

本文以 PFN 資料庫為軸,追蹤 一張實體頁面如何在 Active、Modified、Standby、Free、Zeroed 之間移動。數字本身的讀法,以入門篇「Windows 的「記憶體使用量」代表什麼 ── 正確解讀 Working Set、Private Bytes、Commit 與分頁檔」為前提。

「Windows 記憶體的深層」全 3 回

  1. 第1回:虛擬位址與頁面錯誤
    追蹤已 Commit 的虛擬頁面何時取得實體 RAM。
  2. 第2回(本文):實體頁面的一生
    追蹤離開 Working Set 的頁面狀態轉換,以及分頁檔的角色。
  3. 第3回:區段物件與寫入時複製
    追蹤 DLL、檔案對應、共用記憶體如何共用實體頁面。

第2回要回答的問題只有一個。

離開 Working Set 的實體頁面,是消失、進磁碟,還是留在 RAM?

預設讀者是想從機制理解「Available 很高、Standby 也很高」、Working Set 修剪後的行為、分頁檔設定與記憶體壓縮的開發者與維運人員。前置環境是 Windows 10/11 或現行 Windows Server,必要背景是 Working Set、Commit、軟性/硬性錯誤的基礎。難度為中級;會用到 PFN 與頁面清單等內部用語,但焦點放在不靠核心偵錯工具、用 RAMMap 與 PerfMon 就能觀察的範圍。

1. 先講結論

先整理容易讀錯的幾點。

  • 離開 Working Set 的頁面,不一定立刻消失。
    乾淨頁面留在 Standby,若再需要同一份內容,可以不讀磁碟就回來。
  • 已修改頁面不能立刻重用。
    私有內容要能寫回分頁檔、對應檔案對應要能寫回該檔案之後,才會變成可重用。
  • Available 包含 Standby。
    Standby 既是仍握著內容的快取,也是必要時可立刻拿走的重用候選。1
  • 寫入分頁檔不是等 RAM 徹底用盡才開始的批次工作。
    它依 Modified 清單與記憶體壓力在背景進行。23
  • 分頁檔不只是「慢速 RAM」。
    它拉高 Commit Limit、成為已修改私有頁面的後備存放區,並支援當機傾印。4
  • 停用分頁檔修不好記憶體洩漏。
    Commit Limit 會下降,也可能失去有效運用 RAM 的選項與收集傾印的能力。

一句話:Windows 在丟棄頁面前,會先確認它是否可能再被需要,以及有沒有地方可以還原原本內容

2. PFN 資料庫 ── 實體 RAM 這一側的帳冊

第1回見過的 PTE,代表虛擬頁面到實體頁面的轉譯。從實體頁面這一側看,「這張 RAM 頁面現在拿來做什麼」的帳冊,就是 PFN 資料庫。PFN 是 Page Frame Number 的縮寫:把實體 RAM 依頁面單位編號。

PFN 項目在概念上追蹤這些資訊。

  • 實體頁面的目前狀態
  • 參照計數與共用計數
  • 對應的 PTE
  • 是否已修改
  • 屬於哪一份頁面清單
  • 與 NUMA 節點、優先順序有關的資訊

在 WinDbg 裡,!pfn 顯示特定 PFN 的資訊,!memusage 顯示實體記憶體用量與各頁面清單合計。56 若不想用核心偵錯工具觀察同一世界,可用 Sysinternals 的 RAMMap。Use Counts 看用途與頁面清單,Priority Summary 看依優先順序拆開的 Standby,Physical Pages 看逐頁用途。7

3. 把五種狀態畫在同一張圖

本文把實體頁面的流動簡化成下列五種狀態。嚴格來說,現行 Windows 還有這裡沒畫出的狀態與清單——依優先順序的 Standby、Transition、Bad 等——而 Active 與其說是單一「Active 清單」,不如說是透過有效 PTE 被 Working Set 等參照中的狀態。即便如此,這張圖對解讀應用程式的記憶體行為已經夠用。

Windows 實體頁面在 Active、Modified、Standby、Free、Zeroed 之間移動的簡化圖

圖 1: Working Set 中被參照的頁面,乾淨就到 Standby,髒就到 Modified。同一份內容可以回來;改作他用時,可直接重用該頁,或為需要全零的配置經過 Free/Zeroed。

圖 1 的 Mermaid 原始碼 ```text flowchart LR zeroed["Zeroed\n已填零"] -->|首次 Touch| active["Active / Valid\nWorking Set 中參照"] active -->|裁掉 clean| standby["Standby\n保留內容的重用候選"] active -->|裁掉 dirty| modified["Modified\n等待寫回"] modified -->|寫回完成| standby standby -->|軟錯誤返回| active standby -->|丟棄舊識別| free["Free\n未填零"] standby -->|直接改作他用| active free -->|供需要零的配置| zeroed ```

這張圖最重要的一點是:離開 Working Set 與失去內容不是同一件事。另外,把 Standby 頁面拿去作其他用途時,也不一定依序經過 Free/Zeroed。若要作為需要全零的新私有頁面交給使用者模式,必須清掉舊內容;若整頁都會被蓋掉(例如作為檔案讀取的目的地),可以拿掉 Standby 身分後直接重用。

4. Active / Valid ── 現在就能參照的實體頁面

Active/Valid 頁面透過有效 PTE,被行程的 Working Set 或系統空間參照。CPU 用一般位址轉譯就能到達,因此這次存取本身不需要頁面錯誤。

不過,頁面並不保證一直維持 Active。為了維持可用記憶體,記憶體管理員會看 Working Set 大小、頁面最近是否被使用等因素,修剪候選頁面。Microsoft 的 Working Set 文件也說明,記憶體管理員會從 Working Set 移除頁面,以騰出可用記憶體。8

4.1. 修剪不是釋放

Working Set 修剪主要改變的是 能立刻透過有效 PTE 參照的常駐狀態。請把下面四件事當成不同事件。

  • 從 Working Set 拿掉
  • 釋放 Commit
  • 釋放虛擬位址範圍
  • 失去原始資料

執行 EmptyWorkingSet 或工具的「Trim Working Set」,不能代替 VirtualFree 或堆積釋放。再碰到同一頁時,它會從 Standby 以軟性錯誤回來,或從後備存放區以硬性錯誤回來。所以「Working Set 變小了」並不表示「洩漏修好了」。

5. 乾淨頁面會到 Standby

即使頁面離開 Working Set,只要內容仍與原始檔案相符,或已有安全的後備存放區,就可以放在 Standby。代表性例子如下。

  • 未修改的 EXE/DLL 程式碼
  • 未修改的記憶體對應檔案
  • 已經寫回的私有頁面
  • 留在檔案快取的資料

Standby 頁面仍保有與先前內容的對應。同一行程或其他行程再需要這些內容時,只要該頁尚未被重用,重新接上 PTE 的軟性錯誤就夠了。

另一方面,若另一個配置需要實體頁面,可以丟掉舊的 Standby 身分並重用該頁。若重用目的地是需要歸零初始化的使用者模式私有頁面,會準備 Zeroed 頁面;若整頁都會被檔案內容蓋掉,可以直接重指派、不必先歸零。

這種兩面性,正是 Standby 既是快取、也是 Available 的原因。

5.1. 為什麼 Available 包含 Standby

MEMORYSTATUSEX.ullAvailPhys 代表不必寫入磁碟就能立刻重用的實體記憶體,是 Standby、Free、Zeroed 的加總。1

構成 Available 的三份頁面清單可用實體記憶體是 Standby、Free、Zeroed 的加總,Working Set 中被參照的 Active 頁面不包含在內不包含Standby(保留內容的重用候選)Available(可用實體記憶體)Free(未使用、尚未歸零)Zeroed(未使用且已歸零)Active(Working Set 中被參照)

圖 2: Available 是 Standby、Free、Zeroed 的加總。仍握著內容的 Standby 也被算成「可用」。

因此工作管理員出現「Free 很少,但 Cached/Standby 很多、Available 仍充足」並不矛盾。Windows 不會讓空閒 RAM 閒置;它把最近用過的檔案與程式碼留在 Standby,需要時當快取快速重用,別的用途需要時再拿走。

不要因為「Free 很少」就斷定立刻缺記憶體;請一併看 Available、Commit、硬性錯誤與處理延遲。

6. 髒頁面在 Modified 等待

應用程式寫入頁面後,內容就不再符合原始後備存放區。若把這張髒頁直接蓋給別的用途,資料會遺失。因此離開 Working Set 的已修改頁面,會在 Modified 等待寫回。

寫回目的地依頁面種類而異。

頁面種類 典型寫回目的地
私有已 Commit 頁面 分頁檔
可寫入的對應檔案 對應的資料檔
檔案快取中的髒資料 對應的資料檔
乾淨的 EXE/DLL 頁面 不必寫回。可從原始映像再讀

Microsoft 的分頁檔文件也說明,磁碟上已存在的 .dll.exe 與一般檔案不必再寫進分頁檔;沒有原始磁碟複本的已修改資料,才會成為分頁檔候選。2

6.1. Modified Page Writer

Modified Page Writer 是系統工作執行緒,掃描記憶體管理員追蹤、以後備在分頁檔的髒頁面,並寫出到分頁檔。3 對應檔案這一側則有 Mapped Page Writer 等路徑,與檔案系統、快取管理員合作,寫回對應檔案。

重點是:寫出不是「RAM 變成 0 位元組之前什麼都不做」。Windows 依 Modified 清單、Available、分頁檔狀態等,在背景準備將來可重用的頁面。寫回完成且沒有其他有效參照時,頁面會帶著內容進入 Standby。

已修改頁面的寫回路徑離開 Working Set 的已修改頁面在 Modified 清單等待;私有頁面在已設定分頁檔時由 Modified Page Writer 寫入分頁檔,對應檔案頁面由 Mapped Page Writer 等寫回對應資料檔,然後帶著內容進入 Standby私有頁面(已設定分頁檔時)對應檔案頁面離開 Working Set 的已修改頁面在 Modified 清單等待寫回Modified Page Writer 寫入分頁檔Mapped Page Writer 等寫回對應檔案寫回後,帶著內容到 Standby

圖 3: 寫回目的地由頁面種類決定,兩條路徑都在背景進行。停用分頁檔的系統上,私有頁面沒有寫回目的地,因此已修改的私有頁面會留在 RAM。

6.2. 把頁面輸出與分頁檔專屬 I/O 分開

下列計數器很容易混在一起,請先確認含義。

  • Memory\\Page Writes/sec:為釋放實體記憶體而發出的分頁寫入 I/O 次數
  • Memory\\Pages Output/sec:那些寫入寫到磁碟的頁面數
  • Memory\\Page Reads/sec:為解決硬性錯誤而發出的磁碟讀取 I/O 次數
  • Memory\\Pages Input/sec:那些讀取進入 RAM 的頁面數

注意:Page Writes/secPages Output/sec 並不是只識別分頁檔的計數器。對應檔案等、寫回檔案後備髒頁的路徑也可能讓它們上升。反過來說,輸入側也不區分分頁檔、DLL、EXE 與記憶體對應檔。2 若要識別 pagefile.sys 專屬 I/O,不要只靠這四個計數器推估;用 ETW/WPA 記錄 File I/O 與 Disk I/O,再以 FileObject 與 FileName 對上目標檔案。9

還有一點:先寫進分頁檔,並不代表立刻從磁碟讀回來。若之後沒有存取,可以把已寫回的頁面從 RAM 拿掉,把實體記憶體留給更常使用的頁面。

7. Standby、Free、Zeroed 的差別

7.1. Standby

仍保有與先前內容對應的狀態。

  • 若再需要同一份內容,可以軟性錯誤回來
  • 若別的用途需要,可以丟掉舊身分並重用
  • 有依優先順序分開的 Standby 清單

7.2. Free

與先前內容的有效對應已失去,頁面可配置。不過頁面裡可能還留著舊位元樣式。原樣交給使用者模式,有洩漏前一個行程資訊的風險。

7.3. Zeroed

內容為零,可以安全地作為新的使用者模式頁面交出。第1回的 demand-zero 錯誤,就是取得可用 Zeroed 頁面並綁到 PTE 的代表例子。從 Free 準備成 Zeroed,依需求與系統狀態進行。

所以「Free」與「Zeroed」看起來都像未使用,安全相關的準備狀態卻不同。

8. 記憶體壓縮存放區 ── 在 RAM 裡再做一個去處

從 Windows 10 起,記憶體有壓力時,記憶體管理員有時會把較少使用的頁面在 RAM 內壓縮,而不是立刻寫到磁碟。那批壓縮頁面的集合就是壓縮存放區。

Windows 10 早期實作把壓縮存放區算在 System 行程的 Working Set 裡;現行 Windows 則在偵錯工具的行程清單中,以專用的 Memory Compression 行程出現。因此調查目前壓縮量時,不要只追 System 行程的 Working Set。目的本身沒變:讓更多應用程式留在實體記憶體,並減少磁碟 I/O。1011

不過請記住下列幾點。

  • 壓縮後的頁面仍占用 RAM
  • 壓縮與解壓縮有 CPU 成本
  • 壓縮不會抹掉 Commit 承諾
  • 並沒有「一定先壓縮、再進分頁檔」的固定順序
  • 政策隨頁面種類、壓力、存取歷程而變

工作管理員的「使用中(已壓縮)」並不表示壓縮把實體記憶體完全騰空。壓縮存放區不是讓分頁檔變多餘的功能;它在 RAM 與儲存體之間,多加了 用 CPU 換較少 I/O 的選項

9. 分頁檔真正的角色

分頁檔至少有三個角色。

分頁檔的三個角色分頁檔拉高 Commit Limit、成為較少存取的已修改私有頁面後備存放區,並成為系統當機傾印的承接處分頁檔拉高 Commit Limit(上限側餘裕)已修改私有頁面的後備存放區系統當機傾印的承接處

圖 4: 分頁檔的角色不只是「慢速 RAM」。即使用量是 0,它仍支撐上限與傾印。

9.1. 拉高 Commit Limit

系統的 Commit Limit 大致由 RAM 加上所有分頁檔的總量決定。沒有分頁檔時,Commit Limit 會降到略小於安裝 RAM 的水準。Commit Total 碰到天花板時,新的 Commit 會失敗,可能導致應用程式異常結束或系統不穩。4

這與「現在 pagefile.sys 寫了幾 GB」是另一件事。分頁檔也是支撐 Commit 承諾的 上限側餘裕

9.2. 支撐已修改的私有頁面

較少存取的已修改私有頁面若以後備在分頁檔,就可以把那些實體頁面從 RAM 拿掉,交給常使用的程式碼與資料。4 停用分頁檔會減少這種從 RAM 拿掉頁面的選項。不能單純說「因為沒有換出,所以比較快」。

9.3. 支撐系統當機傾印

系統當機時要產生 Memory.dmp,需要能支撐所選傾印方式的分頁檔或專用傾印檔。2 完整記憶體傾印、核心記憶體傾印、自動記憶體傾印所需容量不同。

在調查當機的環境裡,只為省空間而刪掉分頁檔,可能讓你在最需要證據時什麼都沒留下。收集方法也可參考「Windows 應用的 crash dump 收集入門 - 先搞清楚 WER / ProcDump / WinDbg 怎麼分工」。

10. 適當大小不是一律的

不該只靠「RAM 的 1.5 倍」這類固定公式決定分頁檔大小。Microsoft 說明,適當大小在下列兩點上因系統而異,無法一概而論。2

  1. 尖峰 System Commit Charge
  2. 你需要的系統當機傾印

實務上依這個順序想。

10.1. 先以系統管理為基準

Windows 預設是系統管理。它會依安裝 RAM、Commit 需求、當機傾印需求等增減。沒有特殊限制或量測結果時,從這裡開始最安全。

10.2. 在代表性負載下量測尖峰 Commit

用 PerfMon 長時間收集下列計數器。

  • Memory\\Committed Bytes
  • Memory\\Commit Limit
  • Memory\\% Committed Bytes In Use
  • Memory\\Modified Page List Bytes
  • Paging File(*)\\% Usage
  • Memory\\Available MBytes
  • Memory\\Page Reads/sec
  • Memory\\Page Writes/sec

收集期間要包含實際尖峰:月底處理、備份、建置、多人同時使用等。

分頁檔使用率偏高,本身不能證明儲存體效能有問題。但貼在天花板上,就是容量不足的警告。請一併看 Commit 是否逼近上限、是否有大量 Modified 在等待、磁碟是否飽和。2

10.3. 先決定傾印需求

先決定要完整記憶體傾印、核心記憶體傾印是否足夠,或改用專用傾印檔。若改成固定大小,必須同時滿足尖峰 Commit 與傾印需求。

11. 自己看一次

11.1. 用 RAMMap 看頁面清單

以系統管理員啟動 RAMMap,先開 Use Counts。7 要看的項目如下。

  • Active
  • Standby
  • Modified
  • Modified no write
  • Free
  • Zeroed

Priority Summary 可確認 Standby 依優先順序拆開。Processes 顯示各行程的 Working Set;File Summary 與 File Details 可追蹤 RAM 裡的檔案資料。

試著讀一次頗大的本機檔案,結束讀取後 Refresh。該檔案的頁面可能仍留在 File Summary 或 Standby 一側。再讀同一檔時,尚未被重用的頁面可能完全不產生磁碟 I/O,或只有很少 I/O。結果會隨記憶體壓力、防毒與檔案大小而變,請看狀態轉換的方向,而不是單次數字。

注意 RAMMap 的 Empty 選單會人為改變系統狀態。不要把清 Standby 當成正式環境的效能改善;只在隔離的測試環境使用。

11.2. 用 Testlimit 分開 Commit 與 Touch

Testlimit 是 Sysinternals 工具,用來模擬記憶體、控制代碼、行程、執行緒等資源不足。先對手上的二進位執行下列指令,確認顯示的版本與用法。

.\\testlimit64.exe -?

以下以 Testlimit v5.24 為對象。官方 v5.24 語法中,-m [MB] 配置指定量記憶體,-d [MB] 配置並 Touch,-e [seconds] 是配置間隔,-c [count] 是配置次數。-c 放在最後。若本機顯示不同,以該用法為準。12

接著在可丟棄的 VM 上小規模試一次。

# -m 64: 配置 64 MiB,-e 1: 間隔 1 秒,-c 8: 做 8 次後停止
.\\testlimit64.exe -m 64 -e 1 -c 8

# 同樣次數與間隔,用 -d 對每個區域做 Touch
.\\testlimit64.exe -d 64 -e 1 -c 8

執行期間同時記錄下列項目。

  • 工作管理員的「已認可 X/Y」
  • RAMMap 的 Active、Modified、Standby
  • Memory\\Committed Bytes
  • Memory\\Commit Limit
  • Memory\\Available MBytes
  • Memory\\Modified Page List Bytes

若要實際重現 Commit 耗盡,不要在主機 PC 上做;在已拍快照的 VM 上逐步增加次數。自動配置到天花板的執行可能讓畫面凍結、行程異常結束、日誌遺失。目的不是讓作業系統不穩,而是觀察 接近 Commit Limit 時,新的 Commit 會失敗

12. 實務上要避開的四種誤讀

12.1. 「Standby 很高,所以是記憶體洩漏」

Standby 是可重用快取,且包含在 Available。判斷洩漏要看負載結束後,行程私有 Commit 基線與配置明細是否持續成長。

12.2. 「把 Working Set 砍小就能修好洩漏」

修剪只改常駐狀態,不釋放 Commit 或虛擬配置。再存取時,頁面會以錯誤回來。

12.3. 「分頁檔用量是 0,所以不需要」

分頁檔支撐的不只是目前寫入量,還有 Commit Limit 與當機傾印。只依日常用量決定刪除,會失去尖峰餘裕與故障時的證據。

12.4. 「一定先記憶體壓縮,再進分頁檔」

壓縮不是固定的串列管線。Windows 依頁面種類、壓縮效率、CPU 負載、記憶體壓力、是否有後備存放區動態選擇。

13. 總結

  • PFN 資料庫是追蹤實體頁面歸屬、參照、修改與清單狀態的帳冊。
  • 離開 Working Set 的乾淨頁面留在 Standby,再需要同一份內容時可用軟性錯誤回來。8
  • 髒頁面在 Modified 等待,私有則寫回分頁檔,對應則寫回對應檔案。3
  • Available 是 Standby、Free、Zeroed 的加總;Standby 偏高本身不是記憶體不足。1
  • 記憶體壓縮在 RAM 內壓縮頁面以減少 I/O,但不會抹掉 Commit 與分頁檔的角色。10
  • 分頁檔支撐 Commit Limit、已修改私有頁面,以及系統當機傾印。42
  • 適當大小由尖峰 Commit 與傾印需求決定,不能用一律倍率決定。2
  • 修剪 Working Set 與清空 Standby 都不是記憶體洩漏的修復。

續篇是第3回「區段物件與寫入時複製:DLL 與檔案對應到底是什麼」。

我們會追蹤為什麼留在 Standby 的檔案頁面與 DLL,從多個行程看起來是同一張實體頁面。

相關文章

相關諮詢領域

小村軟體有限公司承接 Windows 應用程式記憶體壓力、Commit 耗盡、分頁、Working Set 成長,以及當機傾印收集設計的調查。

參考連結

  1. Microsoft Learn, MEMORYSTATUSEX structure. 關於 ullAvailPhys 是不必寫入磁碟就能立刻重用的實體記憶體,且為 Standby、Free、Zeroed 清單的加總。  2 3

  2. Microsoft Learn, How to determine the appropriate page file size for 64-bit versions of Windows. 關於適當大小依尖峰 Commit 與當機傾印需求而異、無法一概而論;以及 Modified 清單、分頁檔使用率、相關計數器與系統管理分頁檔。  2 3 4 5 6 7 8

  3. Microsoft Learn, Data corruption on IO write. 關於 Modified Page Writer 是記憶體管理員的系統工作執行緒,掃描以後備在分頁檔的髒頁面並寫出。  2 3

  4. Microsoft Learn, Introduction to page files. 關於分頁檔把較少存取的已修改頁面從 RAM 拿掉、拉高 Commit Limit,並支援系統當機傾印。  2 3 4

  5. Microsoft Learn, !pfn (WinDbg). 關於可顯示指定 PFN 項目的狀態、參照、PTE 位址等。 

  6. Microsoft Learn, !memusage (WinDbg). 關於可合計實體記憶體用量,以及 Zeroed、Free、Standby、Modified、Active 等頁面狀態。 

  7. Microsoft Learn, RAMMap - Sysinternals. 關於 RAMMap 的 Use Counts、Processes、Priority Summary、Physical Pages、File Summary、File Details 顯示實體記憶體用途與頁面清單。  2

  8. Microsoft Learn, Working Set. 關於記憶體管理員修剪 Working Set 以騰出可用記憶體,以及仍在 Transition 或其他行程 Working Set 的頁面可用軟性錯誤解決。  2

  9. Microsoft Learn, FileIo_Name class. 關於 ETW File I/O 事件具有 FileObject 與 FileName,可將 FileObject 與 Disk I/O 事件對上以識別目標檔案的 I/O。 

  10. Windows Insider Blog, Announcing Windows 10 Insider Preview Build 10525. 關於 Windows 10 早期壓縮存放區實作把 RAM 內壓縮頁面集合放在 System 行程的 Working Set,以減少寫入磁碟。  2

  11. Microsoft Learn, Find Process ID (PID) in Windows. 關於現行 Debugging Tools for Windows 行程清單範例中,System 底下會出現另一個 PID 的 Memory Compression 行程。 

  12. Microsoft Learn, Testlimit - Sysinternals. 關於 Testlimit v5.24 官方語法中 -m 配置記憶體、-d 配置並 Touch、-e 為配置間隔、-c 為配置次數,且 -c 放在最後。 

共用相同標籤的最新文章。能以相近的主題延伸理解。

與本文相近的主題頁面。以本文為起點,可進一步連到相關服務與其他文章。

本文連結到以下服務頁面,歡迎從最接近的入口查看。

常見問題

整理諮詢這個主題時常見的問題。

頁面一離開 Working Set,就會立刻寫進分頁檔嗎?
不會。未修改的頁面會帶著內容移到 Standby,成為可立刻重用的快取。已修改的頁面會移到 Modified,視需要寫回分頁檔或對應檔案後,再進入 Standby 等可重用狀態。
工作管理員的 Available 有包含 Standby 記憶體嗎?
有。Windows 回報的可用實體記憶體是 Standby、Free、Zeroed 的加總。Standby 仍握著舊內容,但必要時可立刻改作他用,因此算進可用記憶體。
寫入分頁檔要等 RAM 完全用盡才開始嗎?
不是。Windows 會依 Modified 清單與可用記憶體狀態,在背景寫回較少存取的已修改頁面。這不是等徹底耗盡再一次全部趕走的單純機制。
停用分頁檔會讓 Windows 變快嗎?
一般不能這樣斷定。停用會降低 Commit Limit,較少存取的已修改頁面更難從 RAM 拿掉,也會影響系統當機傾印。通常維持系統管理,並用尖峰 Commit 與傾印需求來判斷。
有記憶體壓縮就不需要分頁檔了嗎?
不會因此變得不需要。壓縮存放區在 RAM 內壓縮頁面以減少 I/O,但壓縮後的頁面仍占用實體記憶體,也不能取代 Commit 保證。壓縮與換出是記憶體管理員的動態政策。

作者檔案

本文作者的個人檔案頁面。

Go Komura

小村軟體有限公司 代表

以 Windows 軟體開發、技術諮詢與故障調查為中心,在難以重現的故障調查與既有資產仍在運作的專案上具有優勢。

回到部落格一覽