memory - "Mem Usage"高于 WinXP 任务管理器中的 "VM Size"

标签 memory windows-xp taskmanager

在我的 Windows XP 任务管理器中,某些进程在 Mem Usage 列中显示的值高于 VMSize。例如,我的 Firefox 实例显示内存使用量为 111544 K,VMSize 为 100576 K。

根据任务管理器的帮助文件,Mem Usage是进程的工作集,VMSize是虚拟地址空间中提交的内存。

我的问题是,如果一个进程的已提交页数是 A,而同一进程的物理内存中的页数是 B,那么它不应该总是 B ≤ A 吗?每个进程在物理内存中的页数不是已提交页的子集吗?

或者这与进程之间的内存共享有关?请解释。 (也许我对“工作集”的定义不合时宜)。

谢谢。

最佳答案

虚拟内存

假设您的程序(例如 Oracle)在启动时分配了 100 MB 的内存 - 尽管没有触及额外的物理/磁盘页面,但您的 VM 大小增加了 100 MB。即 VM 只不过是内存簿记。

总可用物理内存+分页文件内存是系统中所有进程可以分配的最大内存。系统这样做是为了确保在任何时间点,如果进程实际开始消耗它分配的所有内存,操作系统可以提供所需的实际物理页面。

私有(private)内存

如果程序将 10 MB 的数据复制到这 100 MB 中,操作系统会感知到没有为与这些地址对应的进程分配任何页面,并将值(value) 10 MB 的物理页面分配到进程的私有(private)内存中。 (这个过程称为缺页)

工作集

定义:工作集是程序最近接触过的内存页的集合。

此时这 10 个页面被添加到流程的工作集中。如果该进程随后继续将此数据复制到先前分配的另一个 10 MB 缓存中,则其他一切都保持不变,但如果那些旧页面不在工作集中,则工作集会再次增加 10 Mb。但是如果那些页面已经在工作集中,那么一切都很好,程序工作集中保持不变。

工作集行为

假设您的进程永远不会再接触前 10 个页面,在这种情况下,这些页面会从进程的工作集中删除,并可能发送到页面文件,以便操作系统可以引入其他更频繁使用的页面。但是,如果没有紧急的低内存需求,则无需执行此分页操作,操作系统可以像其丰富的内存一样行事。在这种情况下,工作集只是让这些页面保留下来。

什么时候工作集> 虚拟内存

现在想象同一个程序取消分配所有 100 Mb 的内存。程序 VM 大小立即减少 100 MB(记住 VM = 所有内存分配请求的簿记)

工作集不必受此影响,因为这不会改变最近接触到的那些 10 Mb 页面的事实。因此,尽管操作系统可以在需要时回收它们,但这些页面仍然保留在进程的工作集中。

这将有效地使 VM < 工作集。但是,如果您启动另一个消耗更多内存的进程并且操作系统回收工作集页面,这将纠正。

关于memory - "Mem Usage"高于 WinXP 任务管理器中的 "VM Size",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/252597/

相关文章:

Android - 背景图片占用太多内存

c - malloc 对 RAM 使用没有影响,为什么?

c# - 如何使用 C# 将 Windows 系统时钟设置为正确的本地时间?

java - Android TaskManager 将显示当前内存使用情况和 CPU 使用情况

go - 使用结构对常量进行分组有哪些副作用

c++ - C中的结构内存布局

c++ - Telnet 客户端控制台 : SEND invalid command - Only for Spanish version

windows-xp - 如何告诉 "windows security center"我是 "antivirus"?

c# - 如何获取在任务管理器中运行的进程的用户名?

c - 有什么方法可以使用批处理脚本杀死Windows Task Manager?