上一篇「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回:虚拟地址与缺页错误
追踪已 Commit 的虚拟页何时取得物理 RAM。 - 第2回(本文):物理页的一生
追踪离开 Working Set 的页状态转换,以及页面文件的角色。 - 第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 等引用中的状态。即便如此,这张图对解读应用程序的内存行为已经够用。
图 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
flowchart LR
accTitle: 构成 Available 的三份页列表
accDescr: 可用物理内存是 Standby、Free、Zeroed 的合计,Working Set 中被引用的 Active 页不包含在内
standby["Standby(保留内容的重用候选)"] --> avail["Available(可用物理内存)"]
free["Free(未使用、尚未归零)"] --> avail
zeroed["Zeroed(未使用且已归零)"] --> avail
active["Active(Working Set 中被引用)"] -.->|不包含| avail
图 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。
flowchart TB
accTitle: 已修改页的写回路径
accDescr: 离开 Working Set 的已修改页在 Modified 列表等待;私有页在已设置页面文件时由 Modified Page Writer 写入页面文件,映射文件页由 Mapped Page Writer 等写回对应数据文件,然后带着内容进入 Standby
dirty["离开 Working Set 的已修改页"] --> modified["在 Modified 列表等待写回"]
modified -->|"私有页(已设置页面文件时)"| mpw["Modified Page Writer 写入页面文件"]
modified -->|映射文件页| mapped["Mapped Page Writer 等写回对应文件"]
mpw --> standby["写回后,带着内容到 Standby"]
mapped --> 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/sec 与 Pages 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. 页面文件真正的角色
页面文件至少有三个角色。
flowchart LR
accTitle: 页面文件的三个角色
accDescr: 页面文件拉高 Commit Limit、成为较少访问的已修改私有页后备存储,并成为系统崩溃转储的承接处
pagefile["页面文件"] --> limit["拉高 Commit Limit(上限侧余量)"]
pagefile --> backing["已修改私有页的后备存储"]
pagefile --> dump["系统崩溃转储的承接处"]
图 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
- 峰值 System Commit Charge
- 你需要的系统崩溃转储
实务上按这个顺序想。
10.1. 先以系统管理为基准
Windows 默认是系统管理。它会按安装 RAM、Commit 需求、崩溃转储需求等增减。没有特殊限制或测量结果时,从这里开始最安全。
10.2. 在代表性负载下测量峰值 Commit
用 PerfMon 长时间收集下列计数器。
Memory\\Committed BytesMemory\\Commit LimitMemory\\% Committed Bytes In UseMemory\\Modified Page List BytesPaging File(*)\\% UsageMemory\\Available MBytesMemory\\Page Reads/secMemory\\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 BytesMemory\\Commit LimitMemory\\Available MBytesMemory\\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 内存的深层(第1回) ── 虚拟地址变成物理 RAM 的瞬间
- Windows的「内存使用量」究竟表示什么 ── 正确解读 Working Set・Private Bytes・Commit・页面文件
- Windows I/O 的深层(第4回) ── 缓存管理器:你的 WriteFile 何时才能到达磁盘
- Windows应用的crash dump收集入门 - 先搞清楚 WER / ProcDump / WinDbg怎么分工
- Process Explorer / Handle / VMMap 实战 ── 从此刻的状态追查挂起・泄漏・「文件正在使用」问题
相关咨询领域
小村软件有限公司承接 Windows 应用程序内存压力、Commit 耗尽、分页、Working Set 增长,以及崩溃转储收集设计的调查。
参考链接
-
Microsoft Learn, MEMORYSTATUSEX structure. 关于
ullAvailPhys是不必写入磁盘就能立刻重用的物理内存,且为 Standby、Free、Zeroed 列表的合计。 ↩ ↩2 ↩3 -
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
-
Microsoft Learn, Data corruption on IO write. 关于 Modified Page Writer 是内存管理器的系统工作线程,扫描以后备在页面文件的脏页并写出。 ↩ ↩2 ↩3
-
Microsoft Learn, Introduction to page files. 关于页面文件把较少访问的已修改页从 RAM 拿掉、拉高 Commit Limit,并支持系统崩溃转储。 ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, !pfn (WinDbg). 关于可显示指定 PFN 项的状态、引用、PTE 地址等。 ↩
-
Microsoft Learn, !memusage (WinDbg). 关于可合计物理内存用量,以及 Zeroed、Free、Standby、Modified、Active 等页状态。 ↩
-
Microsoft Learn, RAMMap - Sysinternals. 关于 RAMMap 的 Use Counts、Processes、Priority Summary、Physical Pages、File Summary、File Details 显示物理内存用途与页列表。 ↩ ↩2
-
Microsoft Learn, Working Set. 关于内存管理器裁剪 Working Set 以腾出可用内存,以及仍在 Transition 或其他进程 Working Set 的页可用软错误解决。 ↩ ↩2
-
Microsoft Learn, FileIo_Name class. 关于 ETW File I/O 事件具有 FileObject 与 FileName,可将 FileObject 与 Disk I/O 事件对上以识别目标文件的 I/O。 ↩
-
Windows Insider Blog, Announcing Windows 10 Insider Preview Build 10525. 关于 Windows 10 早期压缩存储实现把 RAM 内压缩页集合放在 System 进程的 Working Set,以减少写入磁盘。 ↩ ↩2
-
Microsoft Learn, Find Process ID (PID) in Windows. 关于现行 Debugging Tools for Windows 进程列表示例中,System 底下会出现另一个 PID 的
Memory Compression进程。 ↩ -
Microsoft Learn, Testlimit - Sysinternals. 关于 Testlimit v5.24 官方语法中
-m分配内存、-d分配并 Touch、-e为分配间隔、-c为分配次数,且-c放在最后。 ↩
相关文章
共享相同标签的最新文章。可以围绕相近的主题进一步加深理解。
Windows的「内存使用量」究竟表示什么 ── 正确解读 Working Set・Private Bytes・Commit・页面文件
任务管理器中的内存、Working Set、Private Bytes、Commit并不是同一个值。本文讲解Windows虚拟内存与物理内存的关系、页面文件的作用,以及在排查内存不足或泄漏时应该关注的指标。
Windows 内存的深层(第1回) ── 虚拟地址变成物理 RAM 的瞬间:页错误从头到尾
把 VirtualAlloc、VAD、页表、TLB、demand-zero 与硬错误串起来,说明虚拟地址被赋予物理 RAM 的那一瞬间。
Windows 内存的深层(第3回)── 节对象与写时复制:DLL 与文件映射的真面目
把节对象、映像与数据映射、共享缓存、写时复制串起来,说明 DLL 与共享内存如何共享物理页。
Windows 虚拟化的深层(第3回) ── 数秒启动的虚拟机:WSL2、Windows Sandbox 与容器为何这么轻
WSL2 和 Windows Sandbox 为何数秒启动、用起来这么轻?本文从动态基础映像、直接映射、动态内存分配讲到 Hyper-V 隔离容器,讲解其机制。
Windows 虚拟化的深层(第2回) ── 连内核也看不见的内存:VBS、HVCI 与 Credential Guard 的机制
在兼容硬件上全新安装时,VBS 默认启用,并用虚拟机监控程序与 SLAT 创建比内核更强的隔离。本文讲解 VTL、安全内核、HVCI 与 Credential Guard 的结构。
相关主题
与本文相近的主题页面。以本文为起点,可以进一步了解相关服务和其他文章。
Windows 技术主题
汇整 KomuraSoft LLC 关于 Windows 开发、故障调查与既有资产活用文章的主题中心。
常见问题
汇总了咨询这一主题时常见的问题。
- 页一离开 Working Set,就会立刻写入页面文件吗?
- 不会。未修改的页会带着内容移到 Standby,成为可立刻重用的缓存。已修改的页会移到 Modified,视需要写回页面文件或对应文件后,再进入 Standby 等可重用状态。
- 任务管理器的 Available 包含 Standby 内存吗?
- 包含。Windows 报告的可用物理内存是 Standby、Free、Zeroed 的合计。Standby 仍握着旧内容,但必要时可立刻改作他用,因此计入可用内存。
- 写入页面文件要等 RAM 完全用尽才开始吗?
- 不是。Windows 会按 Modified 列表和可用内存状态,在后台写回较少访问的已修改页。这不是等彻底耗尽再一次全部赶走的简单机制。
- 禁用页面文件会让 Windows 变快吗?
- 一般不能这样断定。禁用会降低 Commit Limit,较少访问的已修改页更难从 RAM 拿掉,也会影响系统崩溃转储。通常维持系统管理,并用峰值 Commit 与转储需求来判断。
- 有内存压缩就不需要页面文件了吗?
- 不会因此变得不需要。压缩存储在 RAM 内压缩页以减少 I/O,但压缩后的页仍占用物理内存,也不能取代 Commit 保证。压缩与换出是内存管理器的动态策略。