JavaScript 引擎 V8 发布 8.3 版本,性能提升

逃离Java 2020-05-06 16:30:04 ⋅ 732 阅读

JavaScript 引擎 V8 发布了 8.3 版本(测试阶段),正式版本将在之后随 Chrome 83 一起推出,8.3 版本带来了一些面向开发人员的特性。


性能

垃圾收集器中更快的 ArrayBuffer 跟踪

ArrayBuffer 的后备存储是使用嵌入器提供的 ArrayBuffer::Allocator 在 V8 堆之外分配的。当垃圾收集器回收其 ArrayBuffer 对象时,需要释放这些后备存储。V8 v8.3 具有跟踪 ArrayBuffer 及其后备存储的新机制,该机制允许垃圾回收器迭代并同时将后备存储释放给应用程序。这将 ArrayBuffer 繁重的工作负载中的总 GC 暂停时间减少了 50%。

更大的 Wasm 内存

根据 WebAssembly 规范的更新,V8 v8.3 现在允许模块请求最大为 4GB 的内存,从而允许将更多内存密集型用例引入 V8 驱动的平台。要注意的是,这么多的内存可能并不总是在用户的系统上可用;建议以较小的大小创建内存,根据需要进行扩展,并适当地处理增长失败的情况。

修复

存储到原型链上具有类型数组的对象

根据 JavaScript 规范,当将值存储到指定键时,需要查找原型链,以查看键是否已存在于原型中。这些密钥通常不存在于原型链中,因此 V8 安装了快速查找处理程序。

但最近在某些特殊情况中,V8 错误地安装了此快速查找处理程序,从而导致了错误的行为。当 TypedArray 在原型链上时,所有存储到 TypedArray 的 OOB 的键都应被忽略。例如,在低于 v[2] 的情况下,不应向 v 添加属性,并且后续读取应返回 undefined。

v = {};
v.__proto__ = new Int32Array(1);
v[2] = 123;
return v[2]; // Should return undefined

V8 的快速查找处理程序无法处理这种情况,因此在上例中,将返回 123 。V8 v8.3 通过在 TypedArrays 在原型链上时不使用快速查找处理程序来解决此问题。这种情况并不常见,在基准测试中尚未发现任何性能下降的情况。



全部评论: 0

    我有话说:

    dubbogo v1.5.6 发布性能提升并带来多项新特性

    dubbogo 社区近期发布了 dubbogo v1.5.6。该版本和 dubbo 2.7.8 对齐,提供了命令行工具,并提供了多种加载配置的方式。 相关改进实在太多,本文只列出相关重大

    Python 3.8.6 发布

    Python 3.8.6 发布了,它是 Python 3.8 的第六个维护版本3.8 系列的维护版本将每两个月定期更新一次,3.8.7 计划于 2020 年 11 月中旬发布。 随着维护版本

    Apache Spark 3.0 发布,包含3400 多个补丁,TPC-DS 性能提升2倍。

    Spark 是用于大数据处理,数据科学,机器学习和数据分析等领域的统一引擎

    Python 3.9.3 & 3.8.9 发布

    Python 3.9.3 & 3.8.9 现已发布,由于安全修复的原因,这些版本发布时间比计划提前了一个月,但 Python 3.8 的最后一个完整的定期维护版本仍然计划在

    RabbitMQ 3.8.10 发布

    RabbitMQ 3.8.10 已发布,RabbitMQ 是一个 Advanced Message Queuing Protocol(AMQP)的开源实现,由以高性能、健壮以及可伸缩性出名的

    Swoole v4.5.8 版本发布,新增 swoole_error_log 函数

    Swoole v4.5.8 版本已经发布了,在这个版本中增加了 swoole_error_log 函数,用户可以手动调用此函数将错误信息输入到日志中。 并且还优化了 Server

    阿里巴巴中间件-Nacos 发布 v0.8.0 Pre-GA版本,安全稳定上生产

    服务注册和服务配置开源项目 Nacos 本周发布v0.8.0 Pre-GA 版本,作为开源项目生命周期中的里程碑版本之一

    Deno 1.8.1 发布,基于 V8 的 TypeScript 运行时

    Deno 1.8.1 现已发布,Deno 是 V8 上的安全 TypeScript 运行时。 此版本更新内容如下: fix(cli/ast):将 importsNotUsedAsValues 传递

    Python 3.9.2 和 3.8.8 现已发布

    Python 3.9.2 和 3.8.8 发布了。虽然在 3 天前才发过 RC 版本,但由于该版本包含两个安全性修复程序,在用户的敦促下,最终选择加急发布正式版。 接下来,将于 2021 年 5 月

    Node.js 15.6.0 发布

    Node.js 15.6.0 发布,Node.js 是一个基于 Chrome V8 引擎JavaScript 运行时。 此版本主要更新内容包括: child_process: 添加

    【开源资讯】PHP 8 RC 2 发布,第9个测试版本

    PHP 8 RC 2 已经发布,这也是 v8 的第 9 个测试版本。自从进入 Beta 阶段,PHP 8 已进入特性冻结期,不会有特性上的变更。 PHP 8 具体的发布周期已经更改如下

    Spring Boot 2.3.8 发布

    Spring Boot 2.3.8发布,此版本更新内容包括 35 个 bug 修复和依赖项升级。具体更新内容如下: Bug Fixes Default servlet

    Oracle Linux 8 Update 3 发布

    Oracle Linux 8 Update 3 发布。这是新的 Oracle 企业级 Linux 发行版,由 Red Hat Enterprise Linux (RHEL) 的源代码编译而成

    Pyston v2 发布:比 Python 快 20%

    Pyston v2 已正式发布,Pyston 是 Python 的高度兼容实现,自称比 Python 更快。根据 Pyston 提供的宏基准测试结果,其 v2 版本比目前的 Python 3.8

    Linux 5.10.8 发布,最终解决了 Btrfs 的性能问题

    Linux 内核 5.10.8 已经发布。作为 Linux LTS 5.10 系列的最新版本,此次更新解决了 Btrfs 文件系统的性能问题。 Btrfs 是一种支持写入时复制

    Traefik 2.3.4 发布,HTTP 反向代理与负载均衡工具

    Traefik 2.3.4 现已发布,该版本更新内容如下: Bug fixes: [acme] 更新 go-acme/lego 至 v4.1.2 [k8s