垃圾回收机制

1 引用计数

会单独开辟一个空间去统计变量的引用次数,当引用次数为0的时候就被垃圾回收器回收

缺点 会额外占用较大内存 遇到循环引用的对象无法回收垃圾

2 标记清除

将进入环境的变量标记为进入环境,离开环境的标记为离开环境

在运行时,给所有变量标记,然后去掉那些被引用对象的标记以及那些被引用对象引用的标记,最后删除那些有标记的

缺点 会造成内存空间的不连续

标记整理

当标记完成后会将存活的不需要清理的空间移向同一侧,然后清理内存

V8 中的垃圾回收

V8引擎的垃圾回收 引用了标记清除然后加以更改

V8的垃圾回收将内存空间分为两块 一块叫新生区 一块叫老生区 老生区一般存放经过了几次垃圾回收依然存活的数据,通常容量较大

新生区 新生区又将内存划分为两块一块为使用区 一块为空闲区 新创建的数据先放入使用区,当使用区快满了就要进行一次垃圾回收,然后走标记清除机制,再然后将使用区和空闲区对换,当复制到空闲区的对象内存过大时 会被直接移动到老生区,因为空闲区内存占比过大会影响后面的内存分配

新生区的垃圾回收采取了多线程

老生区 老生区就采取标记整理法来垃圾回收

V8垃圾回收进阶

之前的垃圾回收都是一次性不暂停的,这样如果处理时间过久会造成不好的体验所以V8后来改成了分布式垃圾回收即,回收一部分就让程序继续执行,V8创造了三色标记法法 白-灰-黑

标记阶段开始每个根标记为白色,往下寻找子节点,子节点还有就为灰色,全部找完为黑色 下次从灰色开始继续寻找

三色标记法缺点 当新增一个节点时 此时没有灰色节点 但新增节点却有引用,为了解决这种情况,V8团队将回收时判断是否有黑色节点引用白色节点如有,则将白色节点强制改为灰色节点

惰性清理

判断当前容量是否能快速执行下次代码,如果可以则执行代码,垃圾稍后回收

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值