JavaScript 是一门具有自动垃圾收集机制的编程语言,开发人员不必关心内存分配和回收的问题。
以下是对JavaScript的垃圾收集历程总结:
- 离开作用域的值将被自动标记为可以回收,因此将在垃圾收集期间被删除。
- “标记清除”是目前主流的垃圾回收算法,这种算法的思想是给当前不使用的值加上标记,然后再收其内存。
- 另一种垃圾回收的算法是“引用计数”,这种方法的思想是跟踪记录所有值被引用的次数,JavaScript引擎不前都不在使用次算法;但在IE中访问非原生JavaScript对象(如DOM元素)时,这种算法仍然可能会导致问题。
- 当代码中存在循环引用现象时,“引用计数”算法就会导致问题。
- 有的浏览器中可以出发垃圾收集过程(不建议这样做)。在IE中,调用 window.CollectGarbage() 方法会立即执行垃圾收集,在Opera7及更高版本中,调用 window.opera.collect() 也会启动垃圾收集历程。
- 解除变量的引用不仅有助于消除循环引用现象,而且对垃圾收集也有好处,为了确保有效的回收内存,应该及时解除不再使用的全局函数,全局对象属性以及循环引用变量的引用。
解除引用例子如下:
function createPerson(name){ var localPerson = new Object(); localPerson.name = name; return localPerson; } var globalPerson = createPerson("Jack"); //手动解除globalPerson的引用 globalPerson = null;