关于 macos 内存压缩的疑问, 压缩后的内存是储存在物理内存上吗?

253 天前
 touchmii

找了很多资料, 都没有很清晰的解释这个压缩内存到底是怎么回事, 问智障 GPT 直接说压缩后储存到硬盘上面去了, 直觉告诉我事情没有那么简单, 把内存交换到硬盘应该是 swap 做的事情, 而图中压缩内存应该另有玄机, 根据系统自带的进程管理器可以看到使用内存包括了应用内存锁定内存和压缩内存, 三者刚好比物理内存少 4GB, 这 4GB 被缓存文件占用了(常用文件缓存到内存提高加载速度, 比如一个 pdf 文件被 A 软件打开会缓存到内存, 此时其他软件也打开这个文件加载速度就很快了), 操作系统也就是内核占用的内存在锁定内存中(Wired Mem), 而如果这里面的 16GB 压缩内存不在物理内存而是储存在磁盘上面那物理内存空出来的 16GB 内存被谁给用了呢, 再看另外一款监控软件, 显示内存 Other 占用 16GB, 这刚好就是压缩内存大小, 所有这部分压缩内存就是储存在物理内存上的, 同时压缩内存越多表示内存负荷越高, 因为使用到压缩内存是需要实时解压缩同时还要压缩别的空闲内存给解压缩的内存腾挪出位置, 这一切都是在物理内存上完成的.

但是图一末尾还要一项 Swap Used: 14.69GB, 我的理解是它并不跟压缩内存重合, 而是把压缩内存中闲置时间过长未使用的内存交换到磁盘了, 同时会腾出物理内存, 而压缩内存则是可能会在近期用到的内存.

简单来说 macos 内存走向就是, 应用内存 -> 不活动 -> 压缩内存 -> 此时有两种情况: 1.应用唤醒 -> 解压缩内存 -> 应用内存 2.应用长时间未被唤醒 -> 压缩内存交换到磁盘 -> 物理内存腾挪出空间供新的应用内存或解压缩内存使用

这样才能解释很多人说的 8GB 可以用出 16GB 的效果, 当然我没有用过 16GB 一下的机型, 其中吹嘘成分应该比较大, 如果仅仅靠 swap 技术很难做到无感知, Windows 内存管理没有怎么研究, 但是凭借我的使用体验绝对不是 macos 这种方式, linux 上面有种 zram 的内存内压缩但是好像没有流行开来, 这个技术我觉得跟 iOS 的墓碑机制一样需要 SDK 配合分析应用的行为来决定压缩内存的策略, 不然实际使用问题多多.

822 次点击
所在节点    macOS
3 条回复
123test1010
252 天前
物理内存中的二次压缩而已,GPT4 没说压缩到硬盘,https://share.cleanshot.com/J40vqbTV
touchmii
252 天前
@123test1010 gpt3 太拉了, 跟 4 比起来就是胡说八道.
billlee
251 天前
就是和 linux 的 zram 是一样的吧,和传统 swap 比起来就是避免了开销最大的磁盘 I/O. zram 在 android 上已经是普遍使用了,你觉得不流行是因为服务器不会有什么不活动的后台应用,用不上 swap 功能吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/969594

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX