浏览器通过自动内存管理机制回收不再使用的对象,防止内存泄漏。JavaScript引擎(如V8)负责跟踪内存分配,识别不再可达的对象并释放其内存。 浏览器的垃圾回收(Garbage Collection, GC)机制是自动管理内存的核心,旨在识别并释放不再使用的对象内存,避免内存泄漏和性能问题。
window、全局变量)出发,遍历所有可达对象并标记为“活动”。From和To空间,存活对象从From复制到To,清空From。| 场景 | 问题描述 | 解决方案 |
|---|---|---|
| 意外全局变量 | 未声明的变量挂载到window | 使用严格模式('use strict') |
| 未清理的定时器/事件 | 回调函数持有DOM引用 | 及时调用clearInterval/removeEventListener |
| 闭包引用 | 函数内部引用外部变量未释放 | 手动解除引用(如置为null) |
| 游离的DOM引用 | 已移除的DOM节点被JS引用 | 清除DOM节点的所有引用 |
WeakMap/WeakSet管理缓存(弱引用不阻止垃圾回收)。Heap Snapshot分析内存分布。performance.memory(浏览器支持有限)。WeakMap和Map的区别?
WeakMap键为弱引用,不阻止键对象被回收;Map键为强引用。javascript
// 内存泄漏示例(未清理定时器)
function leak() {
const data = new Array(1000000).fill('*');
setInterval(() => {
console.log(data.length); // data一直被闭包引用
}, 1000);
}
// 修复:清理定时器
function fixLeak() {
const data = new Array(1000000).fill('*');
const timer = setInterval(() => {
console.log(data.length);
}, 1000);
// 在不需要时清理
setTimeout(() => clearInterval(timer), 5000);
}