首页 > Web开发 > 详细

JS 垃圾收集

时间:2016-07-30 16:33:45      阅读:270      评论:0      收藏:0      [点我收藏+]

JS具有自动垃圾收集机制;也就是说,执行环境会管理代码执行过程中使用的内存。

 

一、局部变量的生命周期

局部变量只在函数执行过程中存在。

在这个过程中,会为局部变量在栈(或堆)内存上分配相应的空间,以便存储它们的值。然后在函数中使用这些变量,直到函数执行结束;然后释放内存。

 

二、标记清除

当变量进入环境,就将这个变量标记为“进入环境”;从逻辑上讲,永远不能释放进入环境的变量所占的内存;当变量离开环境时,则将其标记为“离开环境”。

 

三、管理内存

为执行环境中的代码保存必要的数据;一旦数据不再有用,最好通过将其设置为null,来释放其引用——这个做法叫做解除引用;这个方法适用于大多数全局变量和全局对象的属性。局部变量会在它们离开执行环境时自动解除引用。

解除一个值的引用并不意味着自动回收该值所占的内存;解除引用的真正作用在于,让值脱离执行环境,以便垃圾收集器下次运行时将其收回。

 

四、闭包与垃圾回收

作用域链是一个对象列表,不是绑定的栈;

每次调用JS函数的时候,都会为之创建一个新的对象来保存局部变量,谓之“变量对象”;把这个对象添加到作用域链中,当函数返回的时候,就从作用域链中将这个变量对象删除。

如果不存在嵌套的函数,也没有其他引用指向这个变量对象,它就会被当做垃圾回收掉。

如果定义了嵌套的函数,每个嵌套的函数都各自对应一条作用域链,并且这个作用域链指向一个变量对象。

如果这些嵌套函数对象在外部函数中保存下来,那么它们也会和所指向的变量对象一样当做垃圾回收。

但是如果这个函数定义了嵌套的函数,并将它作为值返回或者存储在某处的属性里,这时就会有一个外部引用指向这个嵌套的函数,它就不会被当做垃圾回收,并且他所指向的变量对象也不会被当做垃圾回收。

JS 垃圾收集

原文:http://www.cnblogs.com/cc156676/p/5721028.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!