Process Explorer 中的私有字节 VS 工作集

Sca*_*ist 46 process-explorer

我知道工作集是进程使用的实际内存量,而且私有字节是留出的数量,以防万一它需要更多。

那么我是否将两者相加以计算出系统上的其他进程实际占用了多少内存?

Fra*_*mas 58

恐怕没那么简单。特别是 Private bytes 对于回答您提出的问题不是很有用。

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

工作集是属于进程的页面的大小,当前存储在主内存中。当进程使用的内存页面移动到页面文件时,它会从工作集度量中删除,当它被调用回主内存时,它会再次添加进来。

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

Private Bytes是指在进程的私有内存占用完全换出以进行交换的情况下分配给该进程(不一定使用)的页面文件空间量。大多数情况下,该进程并不完全(或根本)驻留在页面文件中,所以这就是为什么私有字节似乎有“空间”可以进一步分配的原因。然而事实并非如此。

然而,私有字节仅指进程私有内存,因此该值可能不反映共享资源(即使共享资源目前仅由该进程使用)。

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

希望有帮助

  • 是的,差不多。如果您担心免费 ram 私人工作集是要走的路。如果您担心页面文件或完全提交(ram + 虚拟内存)私有字节是一个很好的指标。 (4认同)
  • 那么,我是否正确地说“私有字节”是进程请求的内存量,“工作集”是私有字节加上其他进程可以使用的一些额外共享内存?而且,“私有工作集”是当前物理 RAM 中的私有内存量,它是实际使用多少内存的最准确表示? (3认同)
  • “私有字节”是进程提交的私有虚拟地址空间。其中一些可能在页面文件中,一些在 RAM 中,一些在两个地方,其中一些 - 可能是大部分 - 可能根本没有分配物理存储(还)。它是进程对系统整体“提交费用”的贡献。 “私有工作集”是 RAM 中“私有字节”的子集。注意:您不会在 RAMmap 的显示中找到“私有字节”或类似的内容,因为 RAMmap 只涉及物理内存 (RAM),而不是虚拟内存。 (2认同)