增强版 V8,支持可变堆数字
在 V8 中,我们始终致力于提升 JavaScript 性能。作为此项工作的一个部分,我们最近重新审视了 JetStream2 基准测试套件,以消除性能瓶颈。本篇文章详细介绍了我们进行的一项优化,该优化使 async-fs
基准测试的性能提升了显著的 2.5 倍
,并对整体得分产生了显著影响。这项优化源于基准测试,但类似的模式确实存在于 真实代码中。
在 V8 中,我们始终致力于提升 JavaScript 性能。作为此项工作的一个部分,我们最近重新审视了 JetStream2 基准测试套件,以消除性能瓶颈。本篇文章详细介绍了我们进行的一项优化,该优化使 async-fs
基准测试的性能提升了显著的 2.5 倍
,并对整体得分产生了显著影响。这项优化源于基准测试,但类似的模式确实存在于 真实代码中。
注意: 本文最初发布在Google安全博客。
Chrome的内存安全是一个持续不断的努力,以保护我们的用户。我们不断尝试使用不同的技术以超越恶意行为者。在这种精神下,这篇文章介绍了我们使用堆扫描技术来改进C++的内存安全的旅程。
从 v8.8 开始,V8 附带了一个新的实验性非回溯正则表达式引擎(除了现有的 Irregexp 引擎 之外),它保证相对于目标字符串的大小按线性时间执行。这个实验性引擎可以通过下列所述的功能标志启用。
为了运行JavaScript程序,需要对源代码进行处理,使V8能够理解它。V8首先将源代码解析为抽象语法树(AST),即表示程序结构的一组对象。这些AST随后会由Ignition编译成字节码。这些解析+编译阶段的性能很重要:V8在完成编译之前无法运行代码。在这一系列的博客文章中,我们专注于解析以及V8为实现快速解析器所做的工作。
在过去的几年里,V8垃圾回收器(GC)发生了很大的变化。Orinoco项目将一个顺序的、全停式的垃圾回收器转变成了一个大部分并行和并发的回收器,具备增量回退功能。
Array.prototype.sort
是V8中最后几个用自托管JavaScript实现的内置函数之一。移植它为我们提供了实验不同算法和实现策略的机会,并最终在V8 v7.0 / Chrome 70中让它变得稳定。
V8 v6.9 包括了 Liftoff,一款 WebAssembly 的新基线编译器。Liftoff 现已默认在桌面系统上启用。本文详细介绍了添加另一个编译层的动机,并描述了 Liftoff 的实现及性能表现。
代码覆盖率提供了应用程序的某些部分是否已被执行的信息,甚至可以选择提供这些部分被执行的频率信息。它通常用于确定测试套件对特定代码库的覆盖程度。
作为JavaScript开发人员,您可能经常会遇到代码覆盖率能够派上用场的场景。例如:
console.log
进行printf
-风格的调试或手动逐步执行代码,代码覆盖率可以即时显示应用程序中哪些部分已被执行。在V8中,JavaScript对象被分配到由V8垃圾回收器管理的堆上。在之前的博客文章中,我们已经讨论了如何减少垃圾回收暂停时间(不止一次)以及内存消耗。在这篇博客文章中,我们介绍了并行Scavenger,这是V8的主要并发和并行垃圾回收器Orinoco的最新功能之一,并讨论了设计决策以及我们实施的一些备选方法。