JavaScript 内存管理

内存管理

参考

  • MDN内存管理

生命周期

  • 内存分配
  • 使用内存
  • 不需要时垃圾回收,释放内存

引用计数方式

判断对象有没有被其它对象引用

var a = {'s':1}
a = null    //分配的内存即被回收

//问题——循环引用
function f(){
    var a = {'s':1},b={}
    b.o = a
    a.o = b //a指向的内存被b引用,a一次。而b指向的内存又被a中的o引用,b一次。造成循环引用,这种情况下函数运行之后啊a,b仍有计数次数不能被正常回收。
}

//实例 IE6,7时的DOM的垃圾回收bug
var div
window.onload = function() {
    div = document.getElementById("myDivElement")
    div.onclick = function() {
        div.innerHTML = 'xxxx'
    }
}//获取到myDivElement是一块内存,被div引用,然后div又被onclick方法进行引用,造成循环引用。

标记清除方式

从全局对象(window)开始向下寻找引用的对象,然后找这些对象引用到的对象。这些能找到的对象就不会被回收。像上面的循环引用对象,从全局window开始寻找是找不到的,就会被正常回收。

你可能感兴趣的:(JavaScript 内存管理)