参考书籍JavaScript高级程序设计(第四版)
垃圾回收
JavaScript是使用垃圾回收的语言,也就是说执行环境负责在代码执行时管理内存。JavaScript通过自动内存管理实现内存分配和闲置资源回收。 基本思路很简单:确定哪个变量不会再使用,然后释放它占用的内存。这个过程是周期性的,即垃圾回收程序每隔一段时间就会自动运行。
标记清理
js最常用的垃圾回收策略——标记清理。 当变量进入上下文,比如在函数内部声明一个变量时,这个变量会被加上标记。 而在上下文中的变量,逻辑上讲,永远不应该释放它们它们的内存,因为只要上下文中的代码在运行,就有可能用到它们。当变量离开上下文时,也会被加上离开上下文的标记。
给变量加标记的方式有很多种。比如可以维护两个变量列表(“在上下文中的列表”和“不在上下文中的列表”),可以把变量从一个列表转移到另一个列表。
垃圾回收程序运行的时候,会标记内存中的所有变量。然后,它会将所有在上下文中的变量和上下文变量引用的变量的标记去掉。在此之后还在被标记的变量就是待删除的,原因是上下文没有访问到这些变量。随后垃圾回收程序做一次内存清理,销毁带标记的所有变量并收回它们的内存。