回收机制:js程序每次创建字符串数组或者对象时,都会分配内存来存储它,只要像这样动态分配了内存,最终都需要释放内存以便后续再次使用,否则js解释器就会消耗完系统所有可用内存,造成系统崩溃。
回收原理
- 标记清楚
- 引用计数
标记清楚
当变量进入执行环境的时候,垃圾回收器将其标记为进入环境,当变量离开环境的时候,将其标记为离开环境,所以所有变量都会有标记,回收的时候去掉环境中的变量以及被环境中的变量引用的变量的标记,在此之后再被加上的标记的变量即为需要回收的变量,因为环境中的变量已经无法访问到这些变量。
引用计数
另一种不太常见的垃圾回收策略是引用计数。引用计数的含义是跟踪记录每个值被引用的次数。当声明了一个变量并将一个引用类型赋值给该变量时,则这个值的引用次数就是1。相反,如果包含对这个值引用的变量又取得了另外一个值,则这个值的引用次数就减1。当这个引用次数变成0时,则说明没有办法再访问这个值了,因而就可以将其所占的内存空间给收回来。这样,垃圾收集器下次再运行时,它就会释放那些引用次数为0的值所占的内存。
