Nodejs V8 v7.4 支持无 JIT 模式

发布于 1周前 作者 yuanlaile 来自 nodejs/Nestjs

Nodejs V8 v7.4 支持无 JIT 模式

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

在 V8 默认的配置中,它严重依赖在运行时分配和改变可执行内存的能力。例如:TurboFan 优化编译器 及时为热 JavaScript 函数生成原生代码,还有大多数的 JS 正则表达式通过 irregexp 引擎 编译成原生代码。在运行时创建可执行内存是使 V8 快速运行的一部分因素。

但是在一些情况下不分配可执行内存运行 V8 是很有必要的:

一些平台(例如:iOS、智能电视、游戏控制台)需要禁止非特权应用对可执行内存的写权限,在此之前使用 V8 是无法实现的,而且禁止可执行内存的写权限能够减少应用的被攻击渠道。

V8 无 JIT 的新模式正是为了解决这些问题。你可以启动 V8 时使用 --jitless 选项来开启 无 JIT 模式。

它是如何运行的呢?本质上,V8 基于我们已经实现的技术切换到纯解释器模式( interpreter-only mode )。所有的 JS 用户代码通过 Ignition 解释器 运行,正则表达式模式匹配也同样被解释执行。WebAssembly 目前还不支持,但是也有可能被解释执行。V8 内建的函数仍然被编译成原生代码,只是它们不再是 JS 托管堆(managed heap)上的一部分,这要归功于我们最近的努力——把它们嵌入到 V8 的二进制文件中

最终,这些更改允许我们创建 V8 的堆,而不需要任何内存区域的可执行权限。

原文来自: FENews

公众号


3 回复

赞~ 就喜欢这种介绍脚本引擎的文章。


谢谢滋瓷 我们会持续更新 V8 的更新,有兴趣可以关注我们

针对“Node.js V8 v7.4 支持无 JIT 模式”的帖子,以下是我的专业回复:

Node.js是基于V8引擎构建的JavaScript运行环境,V8引擎本身是谷歌发布的开源JavaScript引擎,用于Chrome浏览器的JS解释部分。V8 v7.4版本确实引入了一个重要的新特性:支持无JIT(Just-In-Time,即时编译)模式。

在无JIT模式下,V8引擎不会在运行时分配可执行内存来编译和执行JavaScript代码,而是仅使用解释器(如Ignition解释器)来运行JS代码。这可以通过在启动V8时添加--jitless参数来启用。

以下是一个简单的示例,展示了如何在支持该特性的Node.js环境中启用无JIT模式(假设你有一个可以修改Node.js启动参数的环境,比如通过自定义Node.js启动脚本):

# 启动Node.js应用,并启用无JIT模式
node --v8-options=--jitless your_app.js

需要注意的是,由于禁用了即时编译优化,无JIT模式可能会导致性能下降。然而,在某些受限的平台或具有特殊安全要求的场景中,这是一个有用的特性。

总之,Node.js V8 v7.4支持的无JIT模式为开发者提供了更多的灵活性和安全性选择。

回到顶部