V8 8.0 JavaScript 引擎降低堆内存 40%,添加语言特性 Optional Chaining 和 Null Coalescing

更新日期: 2019-12-09 阅读: 2.7k 标签: 引擎

Google 最新发布了 V8 JavaScript 引擎 V8 8.0 ,其中使用压缩指针(pointer compression)技术,在不影响性能的情况下实现堆内存占用降低了 40%。此外,V8 8.0 添加了支持“可选链”(optional chaining)的操作符 ?. ,以及支持“空合并”( nullish coalescence )的双问号操作符?? 。V8 v8.0 将正式提供在 Chrome 80 版本中。

据 V8 核心成员 Leszek Świrski 介绍,V8 v8.0 对 JavaScript 标签值(tagged value)做了压缩处理。标签值用于表示指向堆或小整数的指针。对于 64 位 CPU,V8 指针并未使用整个 64 位字节表示,而是仅使用了其中的低位字节,高位字节通过算法合成。V8 团队在 文档 中详细阐述了指针压缩算法,该算法参考了 Java 等平台目前在用的技术。在 InfoQ 的访谈中,Świrski 阐明 V8 v8.0 中使用的内存压缩算法去除了内存地址的头 32 位,强制“压缩”指针到 4GB 空间中,所有“压缩”指针构成 4GB 空间内的相对偏移量。在计算完全指针地址时,需要在压缩指针地址上添加基础偏移量。Świrski 补充说明,团队计划结合使用多字节字对齐和地址层位偏移的方式,将压缩的堆规模扩展到 4GB 以外的空间。其算法的基本理念是将内存地址逻辑上组织到多字节字(word)而非字节中。例如,如果使用 8 字节的字,那么只需将地址表示为从 0、7、15、23 等开始,因此能够实现地址空间扩展到 23*232 字节。

V8 团队特别指出,压缩指针向全指针的转换本身是非常高速的操作,因此压缩指针技术并未引入额外的性能代价。而另一方面的额外收益是,经压缩的指针使得 V8 垃圾回收机制更为高效。初步基准测试表明,在 Facebook、CNN、Google Maps 等网站的实践应用中,V8 v8.0 无论是在移动端还是在桌面设备端都表现得更为快速。

从 JavaScript 语言方面看,V8 v8.0 引入了对“可选链”( optional chaining )和“空合并”( nullish coalescence )两种有用语言特性的支持。

可选链技术 意在简化属性值的依次访问运算。由于一些中间对象是 null 或 undefined ,运算存在抛出异常的风险。例如,在下面的代码中,为避免发生上述问题,需预先检查所有需访问的中间属性是经过良好定义的:

if(resource&&resource.address&&resource.address.types)returnresource.address.types.length

使用可选链操作符 ?. ,该代码可替换为如下代码。其中确保了一旦中间组件出现 null 或 undefined 等问题,整体表达式立刻做出短路处理:

returnresource?.address?.types?.length

对于空合并操作符 ?? ,在如下代码的使用场景中,进一步优化了操作符 || :

letiterations= settings.iterations||4;

|| 操作符的不足之处在于,上面的代码中,当所需设置的 settings.iterations 取值为 false (即 settings.iterations == 0 )时,不能使用 || 操作符。运算最终依然得到默认值,即4 。空合并操作符?? 将会正确处理这类问题。例如:

let iterations= settings.iterations??4;

上例中, a 是 null 或 undefined 时,运算 a ?? b 取值为 b ,否则取值为 a 。

V8 v8.0 目前依然尚未形成 V8 稳定发行版,计划在数周后发布在 Chrome 80 稳定版中。开发人员可使用 git checkout -b 8.0 -t branch-heads/8.0 命令获取该版本。

2019 年 12 月 23 日更新:添加了 Leszek Świrski 对 V8 中实际采用的指针压缩算法的阐述。

原文链接:

V8 JavaScript Engine 8.0 Reduces Heap by 40%, Adds Optional Chaining and Null Coalescing

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/7216

相关推荐

免费搜索引擎提交(登录)入口大全

搜索引擎网站收录地址大全;独立博客收录提交网址;英文搜索网站收录地址;注意:目前搜狗,Soso,迅雷狗狗没有网站提交入口,它们都是由谷歌提供技术支持,基本上只要谷歌收录了它们也会跟风。

JavaScript 引擎

编写Web代码有时会让开发人员编写一系列字符并像魔术那样神奇,这些字符会在浏览器中变成具体的图像,文字和动作。了解该技术可以帮助开发人员更好地调整他们作为程序员的技能

规则引擎解决方案浅析

用于页面,流程,扩展点实现的选择;输出结果:实现的位置;编排无数的条件积木和行为积木,达到业务逻辑计算,券库存消减的目的;输出结果:商品重计算后的价格;通过订单,售后单,会员等信息编排和判断

V8引擎是如何工作?

V8是google开发的JavaScript引擎, 它是 开源的 ,而且是用C++编写的。它用于客户端(Google Chrome)和服务器端(node.js)JavaScript应用程序。V8最初旨在提高Web浏览器中JavaScript执行的性能。为了提升速度,V8将JavaScript代码转换为更高效的机器代码,而不是使用解释器。

JavaScript物理引擎之Matter.js与Box2d性能对比

在挑选JavaScript 2D物理引擎的时候,不外乎两种主流的选择:第一种是老牌的Box2D,最开始的版本是C++实现的,后来有了很多种实现,比如flash版本和js版本,第二种是新潮的matter-js,matter-js比较轻量,API和文档都比较有友好。

从Google V8引擎剖析Promise实现

本文阅读的源码为Google V8 Engine v3.29.45,此版本的promise实现为js版本,在后续版本Google继续对其实现进行了处理。引入了es6语法等,在7.X版本迭代后,逐渐迭代成了C版本实现。

JS 引擎 V8 发布 v7.4,性能又大幅提高了

JavaScript 引擎 V8 发布了 7.4 版本,目前处于 beta 阶段,正式版将于几个星期后与 Chrome 74 Stable 一起发布。此版本带来了一些新特性,并极大提升了性能。

什么是v8(javascript引擎)?

v8(javascript引擎)是一个专门处理JavaScript脚本的虚拟机,是将Javascript代码处理并执行的运行环境,一般会附带在网页浏览器之中。V8使用C++开发,并在谷歌浏览器中使用。

JavaScript引擎是如何工作的?从调用栈到Promise你需要知道的一切

你有没有想过浏览器是如何读取和运行 JavaScript 代码的吗?这看起来很神奇,但你可以学到一些发生在幕后的事情。让我们通过介绍 JavaScript 引擎的精彩世界在这种语言中尽情畅游。

Node js 视图引擎

Node js 视图引擎就像 Laravel 中的 Blade。其最基本的定义是,视图引擎是帮助我们用比通常更短、更简单的方式编写 HTML 代码并重用的工具。此外,它还可以从服务器端导入数据并渲染最终的 HTML

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!