第四章 变量、作用域和内存问题(3.垃圾收集)

  ·   JS高设(第三版)   ·   JavaScript     浏览量:

JavaScript具有自动垃圾回收机制,执行环境会负责管理代码执行过程中使用的内存。
开发人员不用关心内存使用问题,自动分配所需的内存以及回收无用内存。
机制:找出那些不再继续使用的变量,然后释放其占用的内存。为此,垃圾收集器会按照固定时间间隔(或或代码执行中预定的收集时间),周期性执行这一操作。

局部变量只在函数执行的过程中存在。
这个过程将会为变量在栈(或堆)上分配空间存储它的值,函数结束后就释放内存,但并非所有情况都这么简单。垃圾收集器必须跟踪变量打上标记,通常有两种策略

标记清除

  • 最常用的方法。
  • 当变量进入环境(如,函数中声明一个变量),标记为进入环境 ,离开环境时,标记为离开环境
  • 垃圾收集器在运行时会给存储在内存中的所有变量加上标记。(全部标记)
  • 然后,去掉环境中的以及被环境中变量引用的变量的标记。(就是与环境有关的统统排除掉)。
  • 而在此之后再被标记的就是要被删除的了,因为环境中已经无法访问他们。
  • 最后销毁那些带标记的变量,回收内存空间。
  • 到2008年为止,IE、Firefox、Opera、Chrome和Safari都是采用此种方法(或类似),只不过垃圾收集时间间隔互有不同。

引用计数

哈哈,不了解,因为现在没人用

性能问题

  • 书中吐槽了一下IE7的性能问题
  • IE能调用window。CollectionGarbage(),Opera高版本调用window.opera.collect()执行垃圾收集

管理内存

出于安全考虑,系统分给浏览器的内存通常比桌面程序少,防止浏览器耗尽资源而系统崩溃。
因此,确保占用最少的内存可以让网页获得更好的性能。
可以将不再使用的全局变量全局对象的属性 设置为null 来释放其引用--称之为解除引用
不过解除引用并不意味着自动收回该值占用内存,而是让他脱离执行环境,一边下次垃圾收集器运行时将其回收



收起 >>
第四章 变量、作用域和内存问题(3.垃圾收集)