JavaScript复习-垃圾回收
2021-05-10 11:25:342021-06-10 18:38:58
GC做了什么:
- 找到内存空间中的垃圾
- 回收垃圾,让程序能再次利用这部分空间
常用的几种GC算法
引用计数法
记录对象有多少程序在引用它,当引用计数为0时就会被回收
优势:
- 可即刻回收垃圾,当引用计数为0时,对象马上会把自己作为空闲空间连到空闲链表上。也就是说在变成垃圾的时候就立刻被回收
GC
效果短、平、快
劣势:
- 计数器可能会占用很大的空间
- 无法解决循环引用无法被回收的问题
标记清除法👍
将GC
过程分为两个阶段:
- 标记阶段:把所有活动对象做上标记
- 清除阶段:把所有没有被标记的对象销毁
优势:
- 实现简单
- 可以解决循环引用的问题
劣势:
- 造成碎片化
- 不能实时回收(采用定时任务定时
GC
)
复制算法
将一个内存空间分为两部分,一部分是From空间,另一部分是To空间,将From空间里面的活动对象复制到To空间,然后释放掉整个From空间,然后此刻将From空间和To空间的身份互换,那么就完成了一次GC。