Lee
Lee
Lee
Published at Nov 9, 2025 · 4 mins to read

浏览器垃圾回收机制

Contents

概述

垃圾回收(Garbage Collection)是浏览器自动管理内存的机制,核心目标是 识别并释放「不再被引用的对象」所占用的内存,避免内存溢出(OOM)。其底层基于「可达性分析」—— 从全局根对象(如 window/global)出发,遍历所有可访问的对象,未被遍历到的对象视为「垃圾」,标记后释放内存。

三大核心垃圾回收算法(浏览器实现)

算法类型核心逻辑优点缺点浏览器应用场景
标记-清除(Mark-Sweep)
1. 标记:遍历所有可达对象,标记为「活跃」;
2. 清除:遍历堆内存,释放未标记的「垃圾」对象。
实现简单,无需移动对象清除后产生内存碎片,影响后续大对象分配早期浏览器(如IE6/7)、V8 早期版本
标记-整理(Mark-Compact)
1. 标记:同「标记-清除」;
2. 整理:将活跃对象向堆内存一端移动,然后释放末端连续内存。
无内存碎片,内存分配效率高需移动对象,耗时更长V8 老年代(Mark-Compact + 标记-清除混合)
分代回收(Generational Collection)
按对象存活时间将堆内存分为「新生代」和「老年代」,分别采用不同算法:
1. 新生代:对象存活短,用「复制算法」(Scavenge)快速回收;
2. 老年代:对象存活长,用「标记-清除+标记-整理」混合回收。
兼顾回收效率和内存利用率,适配不同生命周期对象实现复杂,需维护分代逻辑现代浏览器(Chrome/V8、Firefox/SpiderMonkey)

V8 引擎分代回收深度解析

V8 是 Chrome/Node.js 的 JS 引擎,其分代回收是目前最成熟的实现,核心优化思路是「大部分对象存活时间短,少数对象存活时间长」:

如何规避内存泄漏

减少不必要的长期引用,确保不再需要的对象能被 GC 识别为“垃圾”

编码层面规避

内存泄漏识别工具(Chrome DevTools)

原理

1. 核心考察点

2. 典型面试题与回答要点

内存泄漏:考察“实战排查+问题解决能力”

1. 核心考察点

2. 典型面试题与回答要点

工具使用:考察“问题排查实操能力”

1. 核心考察点

2. 典型面试题

工程化思维:考察“预防与监控能力”

1. 核心考察点

2. 典型面试题

闽ICP备14017690号-8