实际,虚拟,共享和私有内存之间有什么区别?


63

活动监视器中的不同列有些混乱


可能值得注意的是,与“活动”监视器中的列相比,如果在进程上单击“检查”,则存在第五种类型的内存。具体来说,有两种“虚拟”内存:“虚拟内存大小”和“虚拟专用内存”。后者是活动监视器的“虚拟内存”列中显示的内容。
drfrogsplat

Answers:


46

从我对服务器故障的回答中得出:

Mac OS X内存行话:

有线的:这是指内核代码等。永远不应移出RAM的内存。也称为常驻内存。

共享:两个或多个进程之间共享的内存。这两个过程都将显示此内存量,因此在实际使用多少内存上可能会产生误导。

实数:这是task_info()报告的应用程序的“实数”内存使用情况-当前进程具有的物理页数的粗略计数。(大小)

专用:这是进程在驻留内存中单独使用的唯一内存。(RPRVT)

虚拟:映射到任何内容的进程中的地址空间总量-不管是变量还是任何东西的任意大的空间-它都不等于虚拟机的实际使用。(大小)

活动的:当前标记为活动的内存,并且已使用RAM。

不活动:“不活动的内存将不再使用,并已缓存到磁盘。它将保留在RAM中,直到另一个应用程序需要空间为止。如果您(或计算机的客户端)回来,则将这些信息保留在RAM中对您有利。以后再说。” -Mac OS X帮助

免费:内存实际可用的,没有任何的数据量。


我了解的最好的文档(并且已经能够在后续研究中找到)是Apple 在其开发人员网站上自己的《管理内存》文章。

其他有价值的资源:Darwin-dev邮件列表:[ 1 ],[ 2 ]和有关MacOSXHints的旧文章。此外,迈克·阿什(Mike Ash)在他的博客上发布了不错的外行介绍


5
通过阅读Apple的“管理内存”文档,“ 非活动”不一定已缓存到磁盘。如果您检查不活动的内存使用情况(当前为747.5 MB)和“已使用的交换”(当前为0字节),则可以证明这一点。不活动只是指最近未由任何进程读取/写入的内存页面。
drfrogsplat

1
可能需要澄清“虚拟”,因为在活动监视器中有两个对“虚拟”内存的引用。“虚拟内存”列在“检查过程”窗口中引用了“ 虚拟专用内存 ”,然后在该窗口中还有另一个简单标题为“ 虚拟内存大小 ”的条目(我相信这是虚拟内存的共享组件)。这是在10.6.4上(以防活动监视器更改了术语...)
drfrogsplat

“私有内存”是“真实内存”的一部分吗?
富兰克林·于

6

实际内存与物理内存(计算机中的实际RAM模块)有关。虚拟内存是为进程分配多少“假”内存,即为该进程分配在永久存储介质(硬盘,固态驱动器等)上的内存。共享内存是可以与其他进程共享的物理(实际)内存。专用内存是“实际”内存,只能由分配给它的进程使用。

这些说明可能也有帮助...直接从活动监视器->帮助->查看系统内存使用情况:

这是内存窗格底部显示的一些信息的说明:

  • 有线:​​有线内存包含必须始终保留在RAM中的信息
  • 活动的:活动的内存包含正在被积极使用的信息。
  • 不活动:不活动的内存包含未被有效使用的信息。如果您(或计算机的客户端)稍后再使用此信息,则将其保留在RAM中对您有利。
  • 已使用:已使用的内存正在由进程或系统使用。已用内存是有线,活动和非活动内存的总和。如果系统需要内存,它将在使用内存之前占用可用内存。
  • 可用:可用内存不被使用,并且立即可用。
  • VM大小:虚拟内存或VM是可以用作内存的硬盘空间。VM大小是用作内存的磁盘空间量。Mac OS X可以使用的内存多于您拥有的物理RAM的数量。硬盘比RAM慢得多,因此虚拟内存系统会自动在磁盘空间和RAM之间分配信息,以提高性能。页面输入/输出:Mac OS X在RAM和磁盘空间之间移动的信息的千兆字节数

6
这是不正确的。虚拟内存不是在磁盘上分配的内存(称为交换)。虚拟内存是分配了地址空间但不在物理内存中的虚拟内存。看起来似乎是同一回事,但是细微的差别。在许多情况下,程序分配内存时根本不会碰它。在这些情况下,程序将使用大量虚拟内存。举一个具体的例子,我的系统当前正在使用512MB的交换空间,但是分配了196GB的虚拟内存(对于在K64上运行Snow Leopard的用户来说,这是非常典型的数量)。
Louis Gerbarg 2010年

2
@Louis,如果已分配虚拟内存但不使用RAM或硬盘,那么它在哪里?
迈克尔·安德伍德

4
@迈克尔:无处。这是理论上的。仅因为已分配并分配了地址,并不一定意味着它已被实际使用。操作系统的低级位知道何时将这些地址映射到RAM或交换存储中的物理位置,但是如果应用程序实际上不在这些地址上存储信息,则无需占用该空间。不仅如此,而且您还会注意到每个进程的列,即虚拟内存,都远不及虚拟机大小的总和。进程实际上并没有使用所有的内存。
罗伯特·西亚乔

2
有很多虚拟机实际上是不可交换的。例如,如果您映射一个4GB的文件,它将占用4GB的VM,在读取时,它将直接从文件中调入页面,并且在压力下,它将被丢弃(不交换),因为可以简单地重新读取原始文件。VM和交换真的是完全不同的东西,虚拟机只是用来找出在交换。
路易斯Gerbarg

3
通过VSIZE,我指的是活动监视器中未列出的内容,如果需要,您可以在顶部看到它。活动监视器在“虚拟内存”列中列出的内容通常称为VPRVT,这是该应用程序使用的虚拟地址数量,未与任何其他应用程序共享。
路易·格尔巴格

4

Apple在OSX 10.9(小牛)中更新了活动监视器。他们在http://support.apple.com/kb/HT5890上有一篇很好的文章,说明了一切的含义。综上所述...

在此处输入图片说明

  • 物理内存:已安装的RAM数量。
  • 已用内存:正在使用的RAM数量,其他应用程序无法立即使用。
  • 虚拟内存:应用程序要求的内存映射量。这不是实际消耗的RAM资源,它的大小由应用程序的作者决定。
  • 交换已使用:驱动器上的空间用于将未使用的文件与RAM交换。看到一些活动是正常现象,但这并不表示您的RAM资源已用完。在“红色”状态下看到内存压力将指示RAM资源已耗尽。
  • 应用程序内存:应用程序正在使用的空间量。
  • 有线内存:无法缓存到磁盘的内存,因此必须保留在RAM中。其他应用程序不能借用此内存。
  • 压缩:已压缩的RAM中的内存量,使更多RAM资源可用于其他应用程序。
  • 文件缓存: RAM中标记为可供应用程序使用的可用空间,其中包含最近使用的文件。

内存压力图

在活动监视器的早期版本中,空闲,有线,活动,不活动和已用内存统计信息的组合已在Mavericks中替换为易于阅读的“内存压力”图。

内存压力用颜色表示:

  • 绿色 – RAM内存资源可用。
  • 琥珀色 –正在分配RAM内存资源。
  • 红色 – RAM内存资源已耗尽,并且OS X正在使用驱动器进行内存存储。
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.