V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
touchmii
V2EX  ›  macOS

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

  •  
  •   touchmii · 2023-08-30 21:03:53 +08:00 · 1071 次点击
    这是一个创建于 478 天前的主题,其中的信息可能已经有所发展或是发生改变。

    ScreenShot2023-08-30at8.33.20PM

    ScreenShot2023-08-30at8.35.17PM

    找了很多资料, 都没有很清晰的解释这个压缩内存到底是怎么回事, 问智障 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 配合分析应用的行为来决定压缩内存的策略, 不然实际使用问题多多.

    123test1010
        1
    123test1010  
       2023-08-31 10:20:09 +08:00
    物理内存中的二次压缩而已,GPT4 没说压缩到硬盘,https://share.cleanshot.com/J40vqbTV
    touchmii
        2
    touchmii  
    OP
       2023-08-31 13:21:27 +08:00
    @123test1010 gpt3 太拉了, 跟 4 比起来就是胡说八道.
    billlee
        3
    billlee  
       2023-09-01 14:07:11 +08:00 via Android
    就是和 linux 的 zram 是一样的吧,和传统 swap 比起来就是避免了开销最大的磁盘 I/O. zram 在 android 上已经是普遍使用了,你觉得不流行是因为服务器不会有什么不活动的后台应用,用不上 swap 功能吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2537 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:00 · PVG 19:00 · LAX 03:00 · JFK 06:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.