JS `Mark-Sweep-Compact` GC 算法在 V8 中的实现细节

各位观众老爷,大家好!今天咱们来聊聊 V8 引擎里那个神秘又强大的家伙——Mark-Sweep-Compact 垃圾回收算法。这玩意儿听起来高大上,但其实没那么可怕,咱们慢慢把它扒个精光! 首先,咱们得明白垃圾回收是干啥的。简单来说,就是程序运行的时候会产生很多没用的对象,占用着内存。如果这些没用的对象一直堆在那里,内存迟早会被耗光,程序就崩溃了。所以,我们需要一种机制来自动清理这些垃圾,释放内存,这就是垃圾回收。 V8 引擎是 Google Chrome 和 Node.js 的幕后功臣,它的垃圾回收机制非常复杂,其中 Mark-Sweep-Compact 算法是主力军之一。它主要负责 Old Generation 的垃圾回收,也就是那些活得比较久的对象。 为什么需要 Mark-Sweep-Compact? 在了解算法细节之前,我们先搞清楚为什么需要这么一种算法。V8 的内存空间被分为几个不同的区域,比如 New Generation 和 Old Generation。New Generation 主要存放存活时间较短的对象,用 Scavenge 算法(也叫 Copying GC)来回 …