JS垃圾回收机制(新学的)

JS垃圾回收机制(新学的)

垃圾回收机制的作用

清除不再使用的对象,使其释放其占用的内存

策略

1.引用计数法

当一个对象被引用一次,引用数就加1,被取消引用一次,引用数就减1.这样当引用数为0的时候就可以触发垃圾回收机制。但是这样会产生一个问题,就是在循环引用的时候,引用数就不可能为0,所以就导致无法回收

2.标记清除法

所以就诞生了标记清除法。首先可以先把内存的所有对象标记为0,然后从跟对象进行遍历,将存活的对象标记为1,然后将为0的对象清除掉,最后把为1的对象重新标记为0,方便下一次垃圾回收机制回收。但是这样清除之后,剩下的空间是不连续的,那么如何为新进来的对象找位置呢?那么就会有如下3中策略

1.First-Fit:找下能存放新对象的第一个位置

2.Best-Fit:找下能存放新对象的最小的位置

3.Worst-Fit:找到最大的一个空闲地方,然后分配给新对象

chrome对垃圾回收机制的优化

优化了标记清除法

有的对象需要被频繁回收,有的对象不需要被频繁回收。所以就在堆内存分出了两个空间出来,新生代区域和老生代区域。新生代区域存放小的、存活时间短的,而老生代恰恰相反。这两个区域都会有不一样的垃圾回收机制

新生代的垃圾回收机制

新生代区域分为from空间和to空间。from是使用空间,to空间是闲置空间。当from空间快要满的时候,我们就标记from空间里面存活的对象,然后把它们复制到to空间,然后清除from空间,最后再把from空间和to空间兑换。

老生代的垃圾回收机制

首先可以先把内存的所有对象标记为0,然后从跟对象进行遍历,将存活的对象标记为1,然后将为0的对象清除掉,最后把为1的对象重新标记为0,方便下一次垃圾回收机制回收。然后再使用标记压缩算法使它们的位置是连续的

多线程并行回收

因为js是单线程的语言,当执行垃圾回收的时候js的执行会被暂停。所以chrome也对这种情况进行了优化,垃圾回收机制支持多线程并行回收,所以这样的话使得垃圾回收机制的执行时间缩短,但是这样依然会阻塞js的执行。所以就诞生了增量标记法。

增量标记法:

增量标记法的最大特点是js垃圾回收机制可以分段执行,也就是执行一段js然后垃圾回收机制一下,最大限度的保证了js的执行。但是又怎么记录上一次垃圾会收到了哪里呢?所以就诞生了三色标记法

三色标记法就是把上次标记到的位置标志为灰色,然后下一次就从灰色开始回收垃圾

JS还支持并发回收

js在主线程执行,垃圾回收在辅助线程执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值