>[danger] 首先分两种情况:V8 将内存分成 `新生代空间` 和 `老生代空间` * 新生代空间: 用于存活较短的对象 * 又分成两个空间: from 空间 与 to 空间 * Scavenge GC 算法: 当 from 空间被占满时,启动 GC 算法 * 存活的对象从 from space 转移到 to space * 清空 from space * from space 与 to space 互换 * 完成一次新生代 GC * 老生代空间: 用于存活时间较长的对象 * 从 `新生代空间` 转移到 `老生代空间` 的条件(这个过程称为`对象晋升`) * 经历过一次以上 Scavenge GC 的对象 * 当 to space 体积超过 25% * 标记清除算法:标记存活的对象,未被标记的则被释放 * 增量标记:小模块标记,在代码执行间隙执,GC 会影响性能 * 并发标记:不阻塞 js 执行