JavaScript复习-垃圾回收

2021-05-10 11:25:342021-06-10 18:38:58

GC做了什么:

  1. 找到内存空间中的垃圾
  2. 回收垃圾,让程序能再次利用这部分空间

常用的几种GC算法

引用计数法

记录对象有多少程序在引用它,当引用计数为0时就会被回收

优势:

  • 可即刻回收垃圾,当引用计数为0时,对象马上会把自己作为空闲空间连到空闲链表上。也就是说在变成垃圾的时候就立刻被回收
  • GC效果短、平、快

劣势:

  • 计数器可能会占用很大的空间
  • 无法解决循环引用无法被回收的问题

标记清除法👍

GC过程分为两个阶段:

  • 标记阶段:把所有活动对象做上标记
  • 清除阶段:把所有没有被标记的对象销毁

优势:

  • 实现简单
  • 可以解决循环引用的问题

劣势:

  • 造成碎片化
  • 不能实时回收(采用定时任务定时GC

复制算法

将一个内存空间分为两部分,一部分是From空间,另一部分是To空间,将From空间里面的活动对象复制到To空间,然后释放掉整个From空间,然后此刻将From空间和To空间的身份互换,那么就完成了一次GC。

复制算法GC