1 / 2
17 / 17 · Understanding the Garbage Collector
次堆、主堆、立即数
大多数块活不长。次堆只复制还活着的那一点。
列表 1 :: 2 :: 3 :: [] 是三块 cons。整数本身通常是立即数:值塞在指针宽度的字里,用最低位和指针区分,不单独占一块。
minor GC 把新生代里仍然被根(或更老的对象)指着的块拷到主堆,然后整块次堆丢掉。死掉的不用逐个扫。这就是它便宜的原因。下面可以自己点一遍,也可以跑右侧的列表,看尾部被留下。
点一遍次堆
1 / 4
次堆 minor
空
主堆 major
还没有晋升
还没有分配
次堆是一小块 nursery。多数 OCaml 块先生在这里。
例子
utop
let xs = 1 :: 2 :: 3 :: []val xs : int list = [1; 2; 3]
let ys =
match xs with
| _ :: tail -> tail
| [] -> []val ys : int list = [2; 3]
ys- : int list = [2; 3]
改一改
改完再跑
解释器覆盖书前半的核心:函数、标签参数、模式、记录、变体、ref、模块,以及简化的 Map 和 JSON。没有 GADT 细化、Async 和独立编译。
先预测,再对照
2 / 2