程序怎么会使用比系统内存更多的内存呢?

程序怎么会使用比系统内存更多的内存呢?

今天早些时候,我在 Blender 中做一些 3D 建模时,我注意到状态栏中它使用了超过 34,000 MB 的内存。

我检查了我的系统统计数据,令我惊讶的是,它确实使用了 35GB 的 RAM,而丝毫不减慢我的操作系统的速度。

在此处输入图片描述

在此处输入图片描述

这些数字对不上。已使用 5.58 GB 的交换空间,这显然不足以适应Blender。

这是如何工作的?我的电脑只有 8 GB 的 RAM,我连 35 GB 的可用空间都没有在我的硬盘上。

答案1

我相信您在这里看到的是内存压缩的效果,这是 OS X Mavericks 引入的功能。

苹果文章 在 Mac 上的“活动监视器”中查看内存使用情况 描述如下:

  • 已用内存:已使用的 RAM 量。在右侧,您可以看到内存分配的位置。

    • 应用程序内存:应用程序正在使用的内存量。

    • 有线内存:系统运行所需的内存。此内存无法缓存,必须保留在 RAM 中,因此其他应用无法使用。

    • 已压缩:已压缩的内存量,以提供更多的可用 RAM。

    当您的计算机接近其最大内存容量时,内存中的非活动应用程序将被压缩,从而为活动应用程序提供更多内存。选择“压缩内存”列,然后查看每个应用程序的“VM 压缩”列,以查看为该应用程序压缩的内存量。

将此应用到您的数字中,我们发现 Blender 总共使用了 35.40 GB 内存。但是,我们发现其中 32.47 GB 属于压缩内存。剩下 35.4-32.47=2.93 GB未压缩Blender 的内存。

这与给出的“应用程序内存:2.54 GB”的数字更相关,这意味着其中一些未压缩的内存被换出了。

统计数据没有说明压缩内存的占用空间是多少,但从数字中我们可以得出结论,Blender 数据的压缩性非常高,也许是因为有许多重复的字节。

这个结论是基于我们看到的使用的实际内存和交换内存的总量:

  • 应用程序内存:2.54 GB
  • 压缩后:1.29 GB

应用程序使用的总 RAM 为 3.83 GB。

我们为此添加使用的交换空间:5.58 GB。

这些应用程序总共使用了 9.41 GB 的内存,其中大部分被交换出去了。Blender 似乎占用了其中的大部分。

Apple 使用的压缩算法非常令人印象深刻。我们看到一台配备 8 GB RAM 的 Apple 计算机可以毫无问题地支持 35.40 GB 的应用程序,正如绿色的“内存压力”图所示。

了解 Mac 上的压缩内存

内存压缩情况显示在“内存压力”图表中,该图表表明操作系统在压缩 RAM 数据方面的积极程度。当 RAM 空间不足且必须将内存交换到驱动器时​​,图表会从绿色(压力小)变为黄色(压力大),最后变为红色。

运行 35.40 GB 的应用程序时,内存压力图显示只有“一点压力”。压缩系数确实非常令人印象深刻,我估计这个系数大约为 3(或多或少)。

答案2

除了压缩和系统级交换之外,另一种技术可能也很重要。如果文件映射到内存,它不一定完全驻留在内存中。至少对于未改变的部分,系统可能会将原始文件用作某种特定于文件的交换文件。我不知道这在 MacOS 中是如何实现的,我只是想将其添加为答案的可能部分。

相关内容