JavaScript - 垃圾回收机制

2019-10-20  本文已影响0人  ElricTang

局部变量只在函数执行的过程中存在。而在这个过程中,会为局部变量在栈(或堆)内存上分配相应的空间,以便存储它们的值。然后在函数中使用这些变量,直至函数执行结束。此时,局部变量就没有存在的必要了,因此可以释放它们的内存以供将来使用。

具体实现策略

一. 标记清除

垃圾收集器在运行的时候会给存储在内存中的所有变量都加上标记(当然,可以使用任何标记方式)。然后,它会去掉环境中的变量以及被环境中的变量引用的变量的标记。而在此之后再被加上标记的变量将被视为准备删除的变量,原因是环境中的变量已经无法访问到这些变量了。最后,垃圾收集器完成内存清除工作,销毁那些带标记的值并回收它们所占用的内存空间。

二. 引用计数

引用计数的问题:循环引用可能导致内存泄漏

function problem(){
  var obj1 = {};
  var obj2 = {};
  obj1.link2obj2 = obj2;
  obj2.link2obj1 = obj1;
}
var element = document.getElementById("some_element");
var myObject = new Object();
myObject.element = element;
element.someObject = myObject; 
myObject.element = null;
element.someObject = null;
上一篇 下一篇

猜你喜欢

热点阅读