js 的垃圾回收器用来跟踪内存的分配和使用,会定时把分配后不再使用的内存释放掉。
js 垃圾回收器判断内存是否不再使用时,使用了 引用计数
和 标记-清除
两种机制。自 2012 年起,所有现代浏览器都使用了标记-清除垃圾回收算法。
引用计数
当对象没有被其他对象使用时,将会被回收机制回收。
缺点:无法处理循环引用的场景,进而造成内存泄露。
function f(){ var o = {}; var o2 = {}; o.a = o2; // o 引用 o2 o2.a = o; // o2 引用 o return "azerty"; } f();
标记-清除
- 当对象从根对象(全局对象)出发再无法获取到时,将会被回收机制回收。
- 缺点:无法从根对象查询到的对象将无法被清除。但是实际开发中很少遇到此种情况。