参考js高程(javascript高级程序设计)中的内容做了如下归纳整理
javascript 垃圾回收机制
js垃圾收集特点
自动垃圾收集机制,即执行环境会负责管理代码执行过程中使用的内存。
两种垃圾收集方式:
标记清除
- 特点:
- 变量进入环境后标记为“进入环境”,变量离开环境后,则将其标记为“离开环境”
引用计数
- 特点
- 跟踪记录每个值被引用的次数
- 引言:
- IE中有一部分对象并不是原生javascript对象,比如BOM,DOM其实就是用的c++的COM(组件对象模型)对象的形式实现的,而其的GC机制就是采用的引用计数策略。
内存管理
- js特殊的内存管理机制:分配给web浏览器的可用内存数量通常比分配给桌面应用程序的少。目的是处于安全因素,防止运行js的网页耗尽内存把系统也崩掉。
优化内存占用
- 解除引用
- 一旦数据不再有用,最好通过将其值设置为null来释放其引用,作用是:让值脱离执行环境,以方面垃圾收集器下次运行时将其回收。
其他
闭包-内存泄漏
为什么会出现内存泄漏
function assignHandler(){
var ele=document.getElementById('someElement');
ele.onclick=function(){
console.info('click');
}
}
以上代码创建了一个作为ele元素事件处理程序的闭包,而这个闭包又创建了一个循环引用。只要匿名函数存在,ele的引用数就至少是1,因此它占用的内存永远不会被回收。
解决内存泄漏
将不再继续使用的闭包保存的整个变量对象赋值为null,对其进行解除引用,防止内存泄漏。