关于javascript:js-垃圾回收机制

3次阅读

共计 638 个字符,预计需要花费 2 分钟才能阅读完成。

定义

JS 的垃圾回收机制是为了以防内存透露,内存透露的含意就是当曾经不须要某块内存时这块内存还存在着,垃圾回收机制就是间歇的不定期的寻找到不再应用的变量,并开释掉它们所指向的内存。

变量的生命周期

当一个变量的生命周期完结之后它所指向的内存就应该被开释。JS 有两种变量,全局变量和在函数中产生的局部变量。局部变量的生命周期在函数执行过后就完结了,此时便可将它援用的内存开释(即垃圾回收),但全局变量生命周期会继续到浏览器敞开页面。

垃圾回收的形式

  1. 标记革除
  • 大部分浏览器以此形式进行垃圾回收,当变量进入执行环境(函数中申明变量)的时候,垃圾回收器将其标记为“进入环境”,当变量来到环境的时候(函数执行完结)将其标记为“来到环境”,在来到环境之后还有的变量则是须要被删除的变量。标记形式不定,能够是某个非凡位的反转或保护一个列表等。
  • 垃圾收集器给内存中的所有变量都加上标记,而后去掉环境中的变量以及被环境中的变量援用的变量的标记。在此之后再被加上的标记的变量即为须要回收的变量,因为环境中的变量曾经无法访问到这些变量。
  1. 计数革除
  • 这种形式经常会引起内存透露,低版本的 IE 应用这种形式。机制就是跟踪一个值的援用次数,当申明一个变量并将一个援用类型赋值给该变量时该值援用次数加 1,当这个变量指向其余一个时该值的援用次数便减一。当该值援用次数为 0 时就会被回收。
// 此时 obj2 不会被革除,因为 obj1 和  obj2 相互被援用
var obj1 = {b:obj2}
var obj2 = {c:obj1}

obj2 = null
正文完
 0