Appearance
第 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 天不清场:碎片与后台累积会加重桌面压力
练习
- 跑
memory_pressure和vm_stat,写下:空闲多不多、swap 数字大不大。 - 用
ps找出当前占内存前三名的进程,关掉一个不重要的,再观察体感。
小结
- RAM = 桌面,硬盘 = 仓库,swap = 来回搬
- 虚拟内存让程序「感觉」桌面很大,实际由 OS 映射
- 卡顿优先查内存与 swap,不要先骂 CPU
下一课:前台怎么排班——CPU 调度。