外观
垃圾回收机制
JavaScript垃圾回收机制和其他语言比较相似,这里列举一些可能不知道的。
全局变量一般不会回收,局部变量会在作用域外被回收。若内存没有及时回收出去而被其他程序利用的则为内存泄漏。
浏览器中,垃圾回收机制主要由引用计数法和标记清除法实现的。前者指若没有对象指向它的引用则将其回收,但它有个致命的问题:若循环引用,即两个对象互相引用,尽管他们不再使用,垃圾回收器也不会回收,因此会造成内存泄漏。
function func() {
let o1 = {};
let o2 = {};
o1.val = o2;
o2.val = o1;
return "引用计数无法回收"
}
func()现代浏览器大多使用引用计数法了,都使用标记清除法,或基于标记清除法改进的算法。它寻找从根部无法到达的对象,并将其标记为无法使用,然后将其回收。