垃圾回收与内存泄漏
原文地址: https://www.xingkongbj.com/blog/js/garbage-collection.html 垃圾回收--引用计数 将资源的被引用次数保存起来,当被引用次数变为零时就将其释放的过程。 会导致更多的内存泄漏,已不被采用。 导致的特殊内存泄漏 循环引用导致内存不能正常被回收 // 函数 a 执行完后,本来 x, y 对象都应该在垃圾回收阶段被回收, 可是由于存在循环引用,也不能被回收。 function a () { var x = {}; var y = {}; x.z = y; y.z = x; } a(); IE 6, 7 对DOM对象进行引用计数回收,这样简单的垃圾回收机制,非常容易出现循环引用问题导致内存不能被回收, 进行导致内存泄露等问题。 !function(){ // IE 6, 7 中下列代码会导致 btn 不能被回收 var btn = document.getElementsByTagName('button'); btn.onclick = function(){ console.log(btn.innerHTML); }; }(); 垃圾回收--标记清除 标记清除的方式需要对程序的对象进行两次扫描,第一次从根(Root)开始扫描,被根引用了的对象标记为不是垃圾,不是垃圾的对象引用的对象同样标记为不是垃圾,以此递归