根据任务管理器的帮助文件Mem Usage是进程的工作集,VMSize是虚拟地址空间中提交的内存.
我的问题是,如果一个进程的提交页面的数量是A,并且同一进程的物理内存中的页面数目是B,那么B不应该总是为B?每个进程的物理内存中不是页面的一个子集的页数?
或者这是与进程之间的内存共享有关的事情?请解释. (也许我对“工作集”的定义已经不算了).
谢谢.
假设您的程序(例如Oracle)在启动时分配了100 MB内存 – 您的VM大小增加了100 MB,但没有额外的物理/磁盘页面被触摸.即虚拟机只不过是记忆簿保存.
总可用物理内存分页文件内存是系统中所有进程可以分配的最大内存.系统执行此操作,以便它可以确保在任何时间点,如果进程实际上开始消耗所有内存,则分配的操作系统可以提供所需的实际物理页面.
专用内存
如果程序将10 MB的数据复制到100 MB,操作系统会感觉到没有页面被分配给与这些地址相对应的进程,并将10 MB的物理页面分配到进程的专用内存中. (此过程称为页面错误)
工作集
定义:工作集是程序最近触及的一组内存页面.
在这一点上,这10页被添加到该过程的工作集中.如果进程然后将该数据复制到先前分配的另一个10 MB高速缓存中,其他所有内容都保持不变,但如果那些旧版本不在工作集中,则工作集再次上升10 Mb.但是如果已经在工作集中的那些页面,那么一切都很好,程序工作集保持不变.
工作集行为
想象一下,您的进程从未再次触及前10页,在这种情况下,这些页面将从进程的工作集中修剪掉,并可能会发送到页面文件,以便操作系统可以引入其他更频繁使用的页面.然而,如果没有紧急的低内存要求,那么这种寻呼行为不需要完成,而操作系统可以像内存丰富一样.在这种情况下,工作集只允许这些页面保留.
何时工作集>虚拟内存
现在想象同一个程序会分配所有100 Mb的内存.程序VM大小立即减少100 MB(记住VM =所有内存分配请求的记录)
这个工作集不需要受到这个影响,因为这并不会改变那些最近触及的10Mb页面的事实.因此,这些页面仍然保留在该进程的工作集中,尽管操作系统可以在需要时回收它们.
这将有效地使VM工作集.但是,如果您启动另一个消耗更多内存并且操作系统回收工作集页面的进程,这将会改正.