js垃圾回收机制

140 阅读2分钟

垃圾回收机制

我们在运行程序的时候,会创建很多对象,同时也会为这些对象分配内存地址,当这些对象不需要再使用时,就需要释放它的内存地址。释放内存地址的过程就叫做垃圾回收。

垃圾回收的方式

目前,通用的垃圾回收有两种方式,标记清除,和引用计数

标记清除

标记清除,是目前通用的垃圾清除方式,这种方式,有两个阶段,第一个标记阶段,它会把所有被引用的对象做上一个标记。第二个清除阶段,就是把没有标记的对象销毁掉。

标记阶段,可以详细的来说,我们在一个执行环境里面,去把每一个被引用的栈中的对象做上标记,对于堆中的对象,需要递归遍历,因为很可能,堆中对象引用了另一个堆中对象,直到遍历最后一个节点。

清除阶段,回收那些没有打上标记的对象,对于堆中的对象,还是要遍历。

这个方式可以解决循环引用的问题,因为闭环的循环体,在执行环境中,是无法被获取到的,也就无法被标记到。

引用计数

这个不太了解,只知道它是根据引用次数来算,每被引用一次,次数加一,如果被引用的次数为0,则回收。这个方法,会造成一定的内存泄漏,比如循环中的变量,相互引用,计数永远不会为0,无法回收。

内存泄漏

内存泄漏就是不需要再使用的变量,由于某种原因,无法被释放。

1.定时器

2.函数中定义的全局变量。

3.闭包