Chorme V8垃圾回收算法,【大牛疯狂教学

Chrome 浏览器所使用的 V8 引擎就是采用的分代回收策略。这个和 Java 回收策略思想是一致的。目的是通过区分「临时」与「持久」对象;多回收「临时对象区」(新生代younggeneration),少回收「持久对象区」(老生代 tenured generation),减少每次需遍历的对象,从而减少每次GC的耗时。

V8的内存限制

在node中javascript能使用的内存是有限制的.

  1. 64位系统下约为1.4GB。
  1. 32位系统下约为0.7GB。

对应到分代内存中,默认情况下。

  1. 32位系统新生代内存大小为16MB,老生代内存大小为700MB。
  1. 64位系统下,新生代内存大小为32MB,老生代内存大小为1.4GB。

新生代平均分成两块相等的内存空间,叫做semispace,每块内存大小8MB(32位)或16MB(64位)。

这个限制在node启动的时候可以通过传递–max-old-space-size 和 --max-new-space-size来调整,如:

node --max-old-space-size=1700 app.js //单位为MB

node --max-new-space-size=1024 app.js //单位为kb

上述参数在V8初始化时生效,一旦生效就不能再动态改变。

内存限制的原因:

至于V8为何要限制堆的大小,

  • 表层原因:V8最初为浏览器而设计,不太可能遇到用大量内存的场景。

  • 深层原因:V8的垃圾回收机制的限制。官方说法,以1.5GB的垃圾回收堆内存为例,V8做一次小的垃圾回收需要50毫秒以上,做一次非增量式的垃圾回收甚至要1秒以上。这是垃圾回收中引起JS线程暂停执行的时间,在这样时间花销下,应用的性能和响应能力都会直线下降。

V8的分代回收(Generation GC)

V8垃圾回收策略主要基于分代式垃圾回收机制。现代的垃圾回收算法中按对象的存活时间将内存的垃圾回收进行不同的分代,然后分别对不同分代的内存施以更高效的算法。

V8的内存分代:

在V8中,主要将内存分为新生代和老生代,新生代内存 存储的为存活时间较短的对象老生代内存存储的为存活时间较长或常驻内存的对象,如下图:

在这里插入图片描述

V8堆的整体大小就是新生代所用内存空间加上老生代的内存空间。

V8新生代算法(Scavenge):

在分代基础上,新生代中的对象主要通过Scavenge算法进行垃圾回收。在Scavenge的具体实现中,主要采用了Cheney算法

Cheney算法是一种采用复制的方式实现的垃圾回收算法。它将堆内存一分为二,每一部分空间称为semispace。在这两个semispace空间中,只有一个处于使用中,另一个处于闲置状态。处于使用状态的semispace空间称为From空间,处于闲置状态的空间称为To空间。

当我们分配对象时,先是在From空间中进行分配。当开始进行垃圾回收时,会检查From空间中的存活对象,这些存活对象将被复制到To空间中,而(From空间内的)非存活对象占用的空间将会被释放。完成复制后,From空间和To空间的角色发生对换(即以前的From空间释放后变为To;To空间在复制存活的对象后,变为From空间)。简而言之,在垃圾回收过程中,就是通过将存活对象在两个semispace空间之间进行复制。

  • Scavenge的缺点:

只能使用堆内存中的一半,这是由划分空间和复制机制所决定的。

  • Scavenge的优点:

Scavenge由于只复制存活的对象,并且对于生命周期短的场景存活对象只占少部分,所以它**在时间效率上有优异的表现。** **Scavenge是典型的牺牲空间换取时间的算法,** 所以无法大规模地应用到所有的垃圾回收中。但可以发现,Scavenge非常适合应用在新生代中,因为新生代中对象的生命周期较短,恰恰适合这个算法。

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
img

这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频**

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
[外链图片转存中…(img-sc89ns2G-1710870153866)]

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值