JavaScript具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存。这种垃圾收集机制的原理很简单:找出不再使用的变量,释放其占用的内存。垃圾收集器会按照固定的时间间隔(或代码执行中预定的收集时间),周期性地执行这一操作。
周期性地执行这一操作
标记清除
现在所有的浏览器使用的垃圾收集方式是标记清除。这种算法把变量是否被引用简化为,变量是否可获得。
变量是否可获得
从根(在JavaScript中为全局对象)开始找引用变量,及这些变量引用的变量,这样一直找下去。能找到的变量为可获得变量。
标记清除过程
垃圾回收器一开始会给内存中的所有变量都加上一个标记。垃圾回收器会定期地从根开始找可获得变量,并且将这些课获得变量的标记清除。然后将还留有标记的变量进行清除,达到释放内存的结果。以前浏览器中的垃圾回收算法大多使用引用计数。释放的是没有被引用的变量,但是这个算法有个致命的问题——循环引用。即使有两个变量已经不再使用,但是如果这两个变量互相引用了,那么这两个变量就没法被回收。因此,现在所有的浏览器使用的垃圾回收方式都是标记清除。