Answers:
与大多数现代操作系统一样,OS X使用虚拟内存系统来管理内存。除其他目的外,这允许操作系统将计算机视为具有无限的内存池。为此,操作系统会将未使用的RAM部分分页到称为swapfile的磁盘存储中。
当然,RAM不是无限的,因此OS X将RAM分为四类:有线,活动,非活动和空闲。操作系统需要有线内存,并且永远不能将其调出内存。活动内存是当前正在运行的程序使用的内存。最近已被终止(或很长时间未使用)的程序使用了不活动的内存。免费内存,顾名思义,就是不使用RAM。
启动程序时,它将被加载到活动内存中。但是,当您退出程序时,不会将其从RAM中删除。而是撞到不活动的内存中。这就是为什么重新启动程序通常更快的原因-它仍然在RAM中(尝试使用像Firefox这样的大型程序进行此操作)。
一旦使用完所有内存(可用内存为0),操作系统就会将非活动内存写出到交换文件中,以在活动内存中留出更多空间。
如果某个程序被调出到交换文件,然后重新启动它,它将从交换文件中拉入活动内存。
简而言之,您实际上不关心空闲内存是否不足。实际上,您希望它低一些-空闲内存是浪费的内存(因为OS并未将其用于任何事情)。
在检查计算机使用的内存量时,实际上您主要需要注意Swap used和Page ins,后者告诉您虚拟内存交换文件的大小,而Page ins则告诉您操作系统多长时间从交换文件中提取内存。进入活动内存。
这很可能不是问题,并且实际上可能会加快计算机的速度。
所有(大多数?)操作系统都使用磁盘缓存,该磁盘缓存将一些最近访问的文件存储在内存中,从而可以加快对这些文件的重复访问。OS X上的磁盘缓存大小可变,并且将显示为正在使用的“非活动内存”。
如果任何程序需要更多的内存,则OS X将清除一些磁盘缓存(最近最少使用的文件),以留出空间来运行/扩展程序。
我发现如果我进行大量编译或照片分类(即,连续访问数千个文件),则磁盘缓存将扩展并使用大量的非活动内存。仅提供此磁盘缓存,就不用担心了。
如果是后台进程或应用程序正在扩大其内存使用量(但其页面被标记为非活动状态),则可以通过在Activity Monitor中检查“ Real Memory”使用率很高的程序来判断。如果那里没有明显的大容量(即总容量不足8GB),那么它将是文件缓存。
您应该看到几乎没有Swap用法,并且如果您打开一个内存密集型程序,则无需交换磁盘就可以减少不活动内存的数量。
(我相信在10.4或10.5中存在一段时间的错误,该错误有时并不总是非常有效地释放该内存,尽管具有很大的磁盘缓存,也会引起交换,但是以我的经验,这似乎在10.6中已解决)。
“非活动”内存可供其他程序使用-只是缓存您最近使用的程序或数据,以防您再次需要它们。如果您启动其他程序或需要其他数据,则缓存的内存将被清除,并根据需要可用于新的工作负载。
无论如何,这就是理论,我相信这是合理的。但是,我确实找到了有人写的“清除”实用程序的引用,因为他们认为不活动的内存释放得不够快。
有关该主题的官方文档,请阅读此内容(并搜索“无效”)。
从OS X 10.5开始,MAC OS X中明显存在内存管理问题。
我终于设法重现了有问题的情况,因此我进行了测试并将屏幕记录为视频。
我在我的图片/文件夹中的大量图片文件上运行tar + bzip命令,这是基本的unix东西。在开始之前,我运行“清除”命令,以删除不活动/缓存的程序数据。
您可以在视频中看到可用内存开始迅速下降,并且闲置状态不断上升。如果您查看“ bsdtar”命令,它仅占用一部分RAM,因此问题不在此过程中。您不能说这是程序内存泄漏,因为那样的话问题不会出在不活动的ram上,而应该是活动/有线的。
当可用内存降到100mb以下时,我启动了某些应用程序,例如Safari,iPhoto和MS Word,您可以在视频中看到,启动应用程序甚至需要几分钟,而通常情况下(有可用RAM时)加载大约需要3-5秒。
我在Linux Centos 6机器上运行相同的场景和相同的命令,那里没有问题!内存使用量约为10-20mb,缓存/缓冲区没有问题。
在Mac OS X中,内存管理必须非常中断!