V8 v7.4 现在支持无需在 runtime 阶段分配可执行内存就能执行 JavaScript 代码。

在其默认配置中,V8 很大程度上依赖于在 runtime 阶段分配和修改可执行内存的能力。例如,作为一个包含优化过程的编译器,TurboFan 可即时(just-in-time)为热加载 JavaScript(JS) 函数创建原生代码,并且大多数 JS 正则表达式由 irregexp 引擎编译为原生代码。而在 runtime 阶段支持创建可执行内存正是 V8 快速运行的原因之一。

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

某些平台(例如 iOS、智能电视、游戏控制台)禁止对非特权应用程序的可执行内存进行写访问,因此到目前为止,在这些平台上一直无法使用 V8
禁止对可执行内存进行写操作可减少应用程序的攻击面
为此,V8 引入了名为 "JIT-less" 的新模式,旨在解决上面这些问题。当 V8 启动时带上 --jitless 参数,它就可以在没有使用任何 runtime 的情况下(无需分配可执行内存)来运行。
展开
评论