Skip to content

第 03 课 · 内存:桌面与仓库

解释「电脑卡」最常用的一张牌:桌面(RAM)满了,开始跑仓库(swap)。

作者:曹宇春


先记住这个类比

  • 物理内存(RAM) = 每人分到的 办公桌面:当前工作资料摊在上面,读写极快
  • 硬盘 = 仓库:容量大,但搬东西慢
  • Swap = 桌面放不下时,把暂时不用的抽屉 搬去仓库;要用再搬回 → 卡顿的根源之一
  • 内存压缩(Compressor) = 把不常用资料 打成真空袋塞桌角:比跑仓库快,仍是桌面不够的信号

16GB 机器开 Cursor + Chrome + AI 客户端,桌面很容易只剩一个小角落——你就会感觉「机器变肉」。


正式概念(人话版)

虚拟内存

每个程序 以为 自己有一张巨大的地址地图(虚拟地址)。
真正落在哪一格桌面、还是仓库,由 OS 页表(路由表) 决定。程序自己通常无感。

页(Page)

内存按固定大小抽屉管理(常见 4KB;苹果 Silicon 常见更大页)。
总管按页搬,比按单个字节搬高效。

缺页(Page Fault)

程序要的抽屉 不在桌面 → 总管去仓库/解压再搬回来 →
Swap in/out 次数暴增 ≈ 员工 整天跑仓库

栈与堆(极简)

区域类比
代码段部门工作手册(多半只读)
堆(Heap)动态申请的储物箱(new / malloc
栈(Stack)便签层:函数一层层叠,返回就撕掉

在你电脑上看一眼

bash
# 内存压力总览(macOS)
memory_pressure

# 页与 swap 统计
vm_stat | head -20

# 粗看谁占桌面(按内存占比)
ps aux | sort -nrk 4 | head -10

怎么读:

  • free / unused 极少 + compressor 很大 → 桌面紧
  • Swapins / Swapouts 很大 → 经常跑仓库,卡顿合理解释

「系统报告还有多少 GB」若主要靠压缩/交换撑着,体感仍然会慢


开发里什么时候用得上

  • 16GB 笔记本 + 多 Electron = 典型瓶颈是 内存,不是「编译器突然变蠢」
  • 关标签、退 AI 客户端、少开 Docker,有时比换电脑划算
  • 长期不重启 ≈ 8 天不清场:碎片与后台累积会加重桌面压力

练习

  1. memory_pressurevm_stat,写下:空闲多不多、swap 数字大不大。
  2. ps 找出当前占内存前三名的进程,关掉一个不重要的,再观察体感。

小结

  • RAM = 桌面,硬盘 = 仓库,swap = 来回搬
  • 虚拟内存让程序「感觉」桌面很大,实际由 OS 映射
  • 卡顿优先查内存与 swap,不要先骂 CPU

下一课:前台怎么排班——CPU 调度。

© 曹宇春 · 个人学习整理,欢迎交流