JSWeb前端之路让前端飞

JavaScript的垃圾回收机制

2017-05-26  本文已影响135人  07120665a058

垃圾回收

垃圾回收的两种策略:标记清除 和 引用计数

引用计数

let obj1 = { A: 1 }; // A 的引用个数为 1 
let obj2 = obj1;     // A 的引用个数变为 2
obj1 = 0;            // A 的引用个数变为 1
obj2 = 0;            // A 的引用个数变为 0,此时对象 A 就可以被回收

标记清除

常见的几种情况

function func() {
    let obj1 = {};
    let obj2 = {};
    obj1.a = obj2; // obj1 引用 obj2
    obj2.a = obj1; // obj2 引用 obj1
}
//函数结束后,obj1,obj2的引用都不为0,因此不会被回收,这时需要手动将它们赋为null
obj1.a = null; obj2.a = null;
const button = document.getElementById('button');
document.body.removeChild(document.getElementById('button'));

虽然删除了按钮,但是button的引用还一直在内存中,需要手动将button=null

总结

内存泄漏

上一篇 下一篇

猜你喜欢

热点阅读