联动内存
简要回答
联动内存是系统运行所需、必须留在物理内存中的内存。它不能被移到磁盘或缓存,所以App无法使用。
macOS内核、驱动程序和一些核心系统数据会使用联动内存,因为它们必须始终在内存中。它是活动监视器中“已使用内存”的组成部分之一。
联动内存会随你使用Mac而变化。其中一部分取决于正在运行的东西,所以它不是一个固定值。
本页内容
联动内存为什么高
硬件、驱动程序和系统功能都会占用一些联动内存。虚拟化和某些图形工作还会增加占用。因为你无法直接释放它,真正要看的是内存压力是否仍为绿色。
你能做些什么
如果不用虚拟机或其他繁重的系统级工作,就退出运行它们的App;如果Mac已经很久没重启,联动内存看起来又异常高,就重新启动一下。不要为了降低它而删除系统文件或内核扩展。
如何查看“联动内存”
你可以在活动监视器或“终端”中查看联动内存。活动监视器只显示整台Mac的总量。“显示”>“列”中没有可以添加的按进程显示联动内存的列。下面的“终端”命令只读取信息。
- 在活动监视器中点按“内存”标签页。“联动内存”列在窗口底部的“已使用内存”下面。
- 在“终端”中运行
top -l 1 | grep PhysMem。这一行会显示已使用的内存(括号中是联动内存的量)以及未使用的内存。 - 要看更详细的信息,运行
vm_stat。第一行给出页面大小,Pages wired down是联动页面的数量。两者相乘就得到以字节计的内存量。
什么会使用联动内存
活动监视器对联动内存的说明是:包含无法被压缩或交换到磁盘的数据的物理内存。常见的需要它的东西包括:
- macOS内核及其自身的数据。
- 硬件和配件的驱动程序与内核扩展。
- 页表,系统用它来跟踪每个进程的内存。
- App有意锁定在RAM中的内存,有些App会这样做,让自己的数据永远不被移出内存。
“联动内存”就是kernel_task的内存吗?
不是。“内存”列中kernel_task那一行显示的数值,通常比窗口底部的“联动内存”小得多。联动内存是按整个系统统计的,不会算到某一行进程头上,所以给进程列表排序也找不到它的全部数量。
这也是为什么大部分联动内存没法靠退出App来释放。只有当系统中需要它的那部分不再需要时,它才会被释放。
联动内存为什么重要,什么时候值得查看
因为联动内存无法被压缩或移到磁盘,它的每一点都是App用不了的RAM。Apple把联动内存列为内存压力的计算依据之一。
在内存很大的Mac上,联动内存数值大很少会有影响。在内存较小的Mac上,同样的量留给App的空间更少,所以内存压力会更早变黄。解决办法和任何内存不足时一样:少同时运行几个繁重的App。
正常:随着你连接设备、启动和停止虚拟机以及使用Mac,联动内存会小幅上下波动。每台Mac的“已使用内存”中都有它。
值得查看:运行同样的App时,联动内存在几天里不断增长,内存压力开始变黄。重新启动Mac,观察它是否会再次增长。如果只有安装了某个配件或驱动程序时它才增长,就看看那个软件有没有更新,或者用它自带的卸载程序移除它。声称能释放内存的App无法释放联动内存,因为它必须留在RAM中。
常见问题
Mac上的联动内存是什么?
它是系统运行所需的内存,必须留在内存中,App无法使用。
可以释放联动内存吗?
不能直接释放。系统不再需要时会释放它,例如你退出虚拟机时。重新启动会把它重置。
联动内存高是坏事吗?
只要内存压力是绿色,就不是。要看内存压力,而不是单看联动内存的数值。
联动内存可以被压缩或交换吗?
不可以。正因如此它才叫联动内存。只要系统需要,它就必须留在RAM中。
为什么kernel_task的内存比“联动内存”少?
联动内存是按整个系统统计的,而不是算到某一个进程头上,所以kernel_task那一行并不会显示全部。
联动内存会影响内存压力吗?
会。Apple把联动内存列为内存压力的计算依据之一,另外还有可用内存、交换速率和文件缓存内存。
相关条目
分步指南:如何释放Mac的内存。
想找比活动监视器更好的工具?请看Mac上最好用的活动监视器替代品,或者浏览术语表中的所有条目。