Process Explorer中的专用字节VS工作集


39

我知道工作集是进程正在使用的实际内存量,并且专用字节是在需要更多内存时预留的数量。

因此,我是否将两者相加以确定实际从系统上的其他进程中占用了多少内存?

Answers:


52

恐怕不是那么简单。特别是,专用字节对于回答您提出的问题不是很有用。

首先要记住的是,内存页可能存在于主内存或外部存储中(这些天称为“磁盘分页”或“交换”)。第二个是,一个进程将在其内存中拥有专用的内存页面,但也会使用共享页面中的对象,而其他进程正在同时使用这些对象。

工作集是属于该进程的页面的大小,当前存储在主内存中。当进程使用的内存页面移到页面文件时,会将其从工作集指标中删除,并且当将其调回主内存时,会再次添加它。

但是,工作集并非专门指您的进程拥有的内存。进程使用许多共享内存对象,这些对象的大小反映在统计信息中。不幸的是,当两个进程共享一个1MB的对象时,两个进程都在工作集中显示1MB的分配,因此,如果将所有工作集相加,则该1MB对象将被记录两次,因此所有工作集大小的累积可能在极端情况下,似乎超过了可用的滑枕的大小。在此处查看更多信息:http : //cybernetnews.com/cybernotes-windows-memory-usage-explained/

专用字节是指在完全调出要交换的进程专用内存占用量的情况下分配给该进程(不一定使用)的Page文件空间的数量。在大多数情况下,该过程并不完全(或根本没有)驻留在页面文件中,因此这就是为什么专用字节似乎具有“空间”供进一步分配的原因。但是事实并非如此。

但是,专用字节仅指代进程的专用内存,因此此值可能无法反映共享资源(即使当前仅由该进程使用共享资源)。

“工作集专用”(进程浏览器中的“ WS专用字节”或“私有WS”,取决于版本)可能是您使用的最佳指标。它与页面文件无关,因此您可以准确地表示对物理内存的影响,并且不会对共享对象进行双重计数。计算共享对象一次(仅针对创建它们的流程),但这也意味着从单流程角度来看,您没有在记录您的流程使用了由另一个流程创建的共享对象,因此您的流程可能在另一个上使用了更多内存。计算机或需要创建共享库本身而不是使用它的另一个进程实例的情况。Windows任务管理器使用专用工作集作为其内存使用率指标。

希望能有所帮助


1
因此,我说“ Private Bytes”是该进程需要多少内存,而“ Working Set”是Private Bytes加上其他进程可以使用的额外共享内存,我是否正确?而且,“私人工作集”是物理RAM中当前的私有内存量,这是其实际使用多少内存的最准确表示?
Scandalist 2013年

4
是的,差不多。如果您担心免费的ram私有工作集,那就去吧。如果您担心页面文件或完全提交(内存+虚拟内存),专用字节是一个很好的指标。
Frank Thomas

“专用字节”是进程的专用虚拟地址空间。其中一些可能在页面文件中,一些在RAM中,两个地方都存在,其中一些-可能是大多数-可能根本没有分配物理存储(尚未)。它是过程对系统总体“承诺费用”的贡献。“专用工作集”是RAM中“专用字节”的子集。nb:您不会在RAMmap的显示中找到“专用字节”或类似的内容,因为RAMmap仅与物理内存(RAM)有关,而不与虚拟有关。
Jamie Hanrahan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.