iOS 为什么没有内存交换分区(swap)

先直接回答:iOS 确实没有传统意义上的 swap 分区。有 swap 的典型代表是桌面 Linux、macOS、Windows,以及 Android(严格说是 zram 压缩交换,但机制上属于交换的一种)。

下面把"swap 分区是什么、谁有、iOS 为什么没有、没有的话靠什么"讲清楚。

1. swap 分区是什么?

swap(交换空间) 是操作系统在磁盘/闪存 上划出的一块区域,用来存放内存里暂时不用的页(page)。

工作逻辑:

  1. 物理内存(RAM)不够用了。
  2. 内核挑选一些"最近不常用"的内存页。
  3. 把这些页写到磁盘上的 swap 区,然后在 RAM 里腾出空间。
  4. 以后某个进程再访问这些页时,触发缺页异常(page fault) ,内核再把它们从 swap 读回内存。

本质:用磁盘空间换内存空间,代价是访问变慢(磁盘比 RAM 慢几个数量级)。

Linux 上 free -h 看到的 Swap: 那一行,就是这个。

2. 谁有 swap?

系统 有没有 swap 形式
桌面 Linux 有 独立 swap 分区,或 swap 文件
macOS 有 swap 文件(/private/var/vm/swapfile*),动态增长
Windows 有 pagefile.sys(页面文件)
Android 有 主要用 zram(内存里压缩,不落盘),部分设备还有 swap 文件
iOS 没有 ---

3. iOS 为什么没有 swap?

几个关键原因:

① 闪存寿命和性能

iPhone 用的是 NAND 闪存。如果频繁把内存页换进换出,会带来大量写入,既伤闪存寿命,又拖慢速度。移动设备对功耗和延迟极其敏感,swap 的随机读写会显著拉高功耗、拖慢响应。

② 移动端的使用模型不同

桌面可以同时开几十个应用长期驻留,需要 swap 来"假装内存很大"。而 iOS 的应用模型是:前台应用优先,后台应用随时可以被杀 。系统不打算让所有 App 都常驻内存,所以它选择了更"暴力"但更干脆的策略------直接杀进程,而不是费劲把内存换到磁盘。

③ 苹果的取舍:宁可杀,不换

换出到磁盘意味着用户切回那个 App 时会有明显的卡顿(要把页读回来)。iOS 的设计哲学是:让用户切回时 App 重新启动,体验反而更可预期。这就是 Jetsam 存在的背景。

4. 没有 swap,iOS 靠什么?

主要靠三样东西:

① Jetsam(内存紧张时杀进程)

内核监控内存压力,按优先级杀进程。优先级大致考虑:

  • 前台 App 优先级最高,最后被杀。
  • 后台 App、系统守护进程按重要性和占用内存排序。
  • 被杀时通常给 SIGKILL(走之前讨论过的内核直接终止路径)。

你崩溃日志里看到的 0x8badf00d 是 watchdog,而 Jetsam 杀进程对应的是 EXC_CRASH (SIGKILL) / JetsamEvent 这类记录,和 watchdog 是两回事。

② 内存压缩(Compressor)

iOS/macOS 有 内存压缩器 :当内存吃紧时,内核把一些不常用的页在内存里压缩,而不是写到磁盘。这相当于"swap 到内存里",比落盘快得多,也不伤闪存。

所以你会在 Instruments / vm_stat 里看到 compressor 相关的统计。这是 iOS 在没有 swap 的情况下,仍然能腾出空间的重要手段。

③ App 主动释放 / 系统回收

  • App 收到内存警告(didReceiveMemoryWarning)应主动释放缓存。
  • 系统回收可清除的缓存(如 NSCache、图片缓存)。

5. 所以那句话准确吗?

iOS 没有内存交换分区(swap),内存紧张时内核的 jetsam 机制会按优先级杀进程释放内存。

准确 ,但可以补一句:iOS 虽然没 swap,但有内存压缩作为缓冲,压缩也不够时才轮到 Jetsam 杀进程。完整链路是:

复制代码
内存压力上升
  → 释放可清除缓存
  → 内存压缩(compressor)
  → 仍不够:Jetsam 按优先级杀进程

小结

  • swap 分区:把内存页写到磁盘/闪存,用磁盘换内存,Linux/macOS/Windows/Android 都有。
  • iOS 没有 swap:因为闪存寿命、功耗、延迟,以及移动端"前台优先、后台可杀"的模型。
  • iOS 的替代方案:内存压缩 + Jetsam 杀进程 + App 主动释放。
  • Jetsam 和 Watchdog 是两回事:前者因内存压力杀进程,后者因超时杀进程。
相关推荐
OpenAnolis小助手1 天前
RISC-V 基础软件的工程化与性能优化实践
性能优化·操作系统·龙蜥社区·risc-v
青梅味猪大肠2 天前
【操作系统-60】临近适应算法
java·linux·开发语言·嵌入式硬件·算法·操作系统
PMAOS5 天前
4G 功能机操作系统选型指南:KaiOS、Mocor、MAUI、PMAOS 的能力边界与验证方法
嵌入式硬件·ai·操作系统
罗四强5 天前
第10篇:打包上架:签名、打包 HAP、发布到华为应用市场
分布式·操作系统·harmonyos·arkts·鸿蒙系统
Liaiyang667 天前
空圈容错视角-HarmonyOS 7 架构体检:从被动容错到主动免疫的真伪验证与生态反推
操作系统·harmonyos·架构设计·ai-agent·端云协同·鸿蒙7·空圈容错
OpenAnolis小助手7 天前
龙蜥社区亮相 GOSIM AI Vision Forum 共话“Agentic Native”开源新
人工智能·ai·开源·操作系统·龙蜥社区·agent
阿里云基础软件7 天前
Agent 任务提速 10.71%,内存占用降低 21.60%|Alibaba Cloud Linux 4 重大发布
java·linux·人工智能·操作系统·agent
OpenAnolis小助手8 天前
多租户公有云共享 CXL 内存池场景下的内存卸载研究
人工智能·操作系统·龙蜥社区·risc-v·agentic os
OpenAnolis小助手10 天前
PHP 两个严重漏洞曝光,龙蜥社区 24 小时完成 3 版本修复
开发语言·操作系统·php·龙蜥社区
硅基手札11 天前
操作系统设计思想系列 13 · NuttX 深度 — POSIX 飞控底座 + RTOS 群像
架构·操作系统·嵌入式开发·ecos·sel4·nuttx