JavaScript 引擎 V8 新机制:JIT-less

V8 v7.4现在支持JavaScript执行,而无需在运行时分配可执行内存

在其默认配置中,V8在很大程度上依赖于在运行时分配和修改可执行内存的能力。例如,TurboFan优化编译器即时为热JavaScript(JS)函数创建本机代码,并且大多数JS正则表达式由irregexp引擎编译为本机代码。在运行时创建可执行内存是使V8快速运行的一部分

但在某些场景中,我们可能需要刚好需要在不分配可执行内存的情况下运行 V8:

但在某些情况下,可能需要在不分配可执行内存的情况下运行V8:

     1、某些平台(例如iOS,智能电视,游戏控制台)禁止对非特权应用程序的可执行内存进行写访问,因此到目前为止无法使用V8。

     2、禁止写入可执行内存会减少应用程序的攻击面

V8的新JIT-less模式旨在解决这些问题。当使用--jitless标志启动V8时,V8在没有任何运行时分配可执行内存的情况下运行.

到这里,可能有人会问,这个 "JIT-less" 的工作原理到底是什么?对此,官方给出了解释。本质上,V8 只是基于现有的技术切换到了仅使用解释器(interpreter-only)模式:所有 JS 代码都通过 Ignition 解释器运行,同时对正则表达式模式匹配进行解释。虽然目前暂不支持 WebAssembly,不过可以对其进行解释。

而对于 V8 的内置程序,仍会将其编译为原生代码。但开发团队表示最近正努力将这些内置程序嵌入到 V8 二进制文件中,所以它们以后不再是 JS 堆栈。

最后,这些变更使得开发者所创建的 V8 不需要在任何内存区域申请可执行权限。

最终结果

正如上文所提到的,由于在 JIT-less 模式下禁用了优化编译器,因此会降低性能。

为此,开发团队研究了各种基准测试,以更好了解 V8 的性能是如何变化的。本次测试的比较对象包括:Speedometer 2.0、Web Tooling Benchmark 以及 YouTube TV Browsing

Speedometer 2.0 旨在代表典型的 Web 应用程序;Web Tooling Benchmark 包含了一系列常见的 JS 开发者工具;此外还提供了一个模拟在 Youtube 直播间浏览的基准测试。所有测试均在 x64 Linux 桌面系统上本地进行,运行次数超过5次。


△分数越高越好

可以看到,在 JIT-less 模式下,Speedometer 2.0 的性能大概下降了 40%。其中禁用的优化编译器占了大约一半的原因,另一半原因则是由正则表达式解释器引起的,该解释器最初用作调试辅助工具。

由于 Web Tooling Benchmark 会在 TurboFan 中花费更多时间,即它会重度依赖 TurboFan,因此在启用 JIT-less 模式后,测试结果显示下降了大约 80%。

对于最后的测试对象,可以看到性能变化不大。其测试过程包括视频播放和菜单导航,所以即使在 JIT-less 模式下,嵌入器也可以保持合理的性能。

我们鼓励在受限平台或具有特殊安全要求的嵌入器考虑V8的新JIT-less模式,现在可在V8 v7.4中使用。与往常一样,v8用户讨论组欢迎提出问题和反馈

常见问题

   不紧张和不选择有什么区别?
——no-opt禁用涡轮风扇优化编译器。——jitless禁用所有可执行内存的运行时分配。

原文:https://v8.dev/blog/jitless

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值