V8 引擎如何进行垃圾内存的回收?

V8引擎的内存限制

  • 在64位系统中分配的内存空间是1.4GB
  • 在32位系统中分配的内存空间是0.7GB

V8引擎的内存分配
由新生代内存和老生代内存组成,新生代内存的大小为32MB(64位)和16MB(32位)
在这里插入图片描述
V8引擎的内存分配
新生代内存的垃圾回收
新生代内存空间平均分为两份From和To两块空间,如下
在这里插入图片描述
垃圾回收的时候将存活对象从From复制到To空间中(注:在复制到To空间中的对象是依次存放的),将非存活对象回收即可,在下一次垃圾回收中又将To空间中的存活对象复制到From空间中一次存放
好处:解决了内存碎片问题
在这里插入图片描述
经过scavenge算法后会在另外一块空间中按序存放对象,这样便于后续对象的继续存放
在这里插入图片描述

坏处:将新生代内存等分为两份,导致只能在同时使用其中一块空间作为对象存储空间

老生代内存的垃圾回收
经过多次垃圾回收过后,对象依然存在会将该对象移动到老生代内存中,这个过程称为晋升。
触发晋升的条件有以下几种(满足其中之一就会触发晋升)

  1. 已经经历过一次上面提到的新生代scavenge算法回收,该对象依然存在
  2. To(空闲)空间占用超过25%(注:是为了留有足够的空间来存对象)
    第一步:通过标记-清除法,将可以进行回收的对象清除
    第二步:将存活的对象往一段靠拢,因为这是对象移动,所以这是整个过程中最耗时的过程
    在这里插入图片描述

增量标记
基于如上老生代垃圾回收第二步的耗时性,V8引擎将垃圾回收拆解为很多小步骤,这样耗时时间减少为原来的1/6,

参考文档:
http://47.98.159.95/my_blog/blogs/javascript/js-v8/002.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值