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

JavaScript 引擎 V8 新机制:JIT-less相关推荐

  1. 雷军:小米推动山寨机灭亡;苹果回应禁止第三方换电池;Javascript 引擎 V8 7.7 发布 | 极客头条...

    快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...

  2. 开源C++项目Google JavaScript引擎V8挑战实录,带你进入V8之旅

    开源C++项目Google JavaScript引擎V8挑战实录,带你进入V8之旅 http://www.cnblogs.com/pugang/archive/2012/04/02/2430519.h ...

  3. JavaScript引擎—V8引擎

    为什么需要Javascript引擎? 随着JS承担的工作越来越多,早就已超越创造出的初衷(表单验证)的范畴,因此需要快速的解析和执行JavaScript脚本 V8引擎由此而生 JavaScript引擎 ...

  4. JavaScript引擎V8 5.1遵循了更多的ECMAScript规范并支持WASM

    Google宣布了其5.1版本的V8 JavaScript引擎,这个版本提升了对ECMAScript 2017草案规范的支持,并为WASM提供了初步的支持,WASM是一个低层级的.轻便式的字节码,它致 ...

  5. javascript引擎V8精要(1)

    V8是谷歌的开源高性能JavaScript和WebSimulink引擎,用C++编写.它用于铬和铜节点.js,等等.它实现了ECMAScript和WebAssembly,并在使用x64.IA-32.A ...

  6. javascript引擎V8精要(2)

    为了能够在Windows/Linux/macOS for x64上从头开始构建V8,请遵循以下步骤. 获取V8源代码 V8的Git存储库位于https://chromium.googlesource. ...

  7. Node.js 入门教程 6 V8 JavaScript 引擎

    Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录 Node.js 入门教程 6 V8 JavaScript 引擎 6 ...

  8. V8 JavaScript引擎研究(三)垃圾回收器的实现

    V8垃圾回收机制简介 V8垃圾回收器的实现,是V8高效的一个非常重要的原因. V8在运行时自动回收不再需要使用的对象内存,也即是垃圾回收. V8使用了全暂停式(stop-the-world).分代式( ...

  9. JavaScript是解释型语言--V8、JIT

    编程语言 可以通过"语言"来控制计算机,让计算机为我们做事情.(类似于中文.英文) 编程语言是用来控制计算机的一系列指令(Instruction),它有固定的格式和词汇(不同编程语 ...

最新文章

  1. 沉浸式导航栏html,混合开发 h5+ 沉浸式的适配
  2. 轻松两步,我在 SpringBoot 服务上实现了接口限流
  3. 有关SwfUpLoad的2038 错误
  4. 有史以来最精彩的自问自答:OpenAI 转方块的机械手
  5. mysql延迟解决方案
  6. java的自动装箱和拆箱,Java中的自动装箱和拆箱是什么?
  7. win10系统上抓包网卡的驱动总是失效怎么办?
  8. EventLoop 与Channel 的关联
  9. 栈-线性表(代码、分析、汇编)
  10. python 字符串格式化语法_Python:字符串格式化
  11. Log4J 1.x 配置详解
  12. Audio播放流程(三)---NuPlayer流程之setAudioStreamType以及prepare
  13. 嵌入式系统应用开发实验(三): Verilog编程使VGA图像输出
  14. 如何把大写金额变为小写数字_word中怎么将小写金额数字转换为大写
  15. 学位论文参考文献格式
  16. Markdown - Markdown 引用图片太大怎么办 md控制图片的大小 对齐方式
  17. nonebot2聊天机器人插件2:调色盘palette
  18. 6、Latex学习笔记之参考文献篇
  19. 掌握USB/HDMI/MHL/DP验证规范 高速接口传输一次上手
  20. 怪兽IT学院PHP零基础入门在线学习手册

热门文章

  1. “网页上有错误”的解决方法
  2. Silverlight 获得鼠标位置
  3. javascript对象的property和prototype是这样一种关系
  4. 问题十:【总结】解决了问题四~问题九,vec3这个类的代码应该都能看懂了
  5. 机器学习笔记-XGBoost
  6. 大数据开发笔记(三):Mapreduce
  7. 大数据分析中常见的错误
  8. 单片机定时器实验两位倒计时秒表_Proteus入门单片机(3)例程分析
  9. C语言基础专题 - 指针(编写中)
  10. 收据找不到怎么退押金_押金收据单不见了,能退押金吗,合同上有写押金多少的 - 找法网免费法律咨询...