内存管理
参考
生命周期
- 内存分配
- 使用内存
- 不需要时垃圾回收,释放内存
引用计数方式
判断对象有没有被其它对象引用
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开始寻找是找不到的,就会被正常回收。
网友评论