All Articles

V8 Blog | V8 release v6.9 2018-08-07

1. 原文

V8 release v6.9

2. 摘要翻译

Memory savings through embedded built-ins

V8内含了一个扩展 library 来存储 built-in 函数。(后面花费了一整段话来介绍什么是 built-in 函数,以前介绍很多遍了)

Built-in 函数目前在每个 Isolate 上占用 700KB 的内存。从 v6.4 版本的 V8 开始,引入了惰式反序列化,但仍有消耗。

嵌入式 built-ins 则更进一步。一个嵌入式 built-in 被所有的 Isolates 共享,并嵌入它自身的二进制空间,而不是被拷贝进 JavaScript 的堆内存。这意味着 built-ins 无关乎有多少个 Isolates 正在运行,只会占用一份内存。在启用了嵌入式 built-ins 之后,我们看到了一个中值为 9% 的 V8 堆内存消耗减少,样本为 x64 环境的 top 1万个网站。在这些站点上,50% 的情况下节约了至少 1.2 MB 的内存,30% 的情况节约了至少 2.1 MB 的内存,10% 的情况则节约了 3.7 MB 或更多。

V8 将会在 v6.9 版本中发布针对 x64 平台的嵌入式 built-ins 支持。其他平台将会很快得到更新。并将会发布一篇博客来详细解析其中的细节。

Performance

Liftoff, WebAssembly’s new first-tier compiler

WebAssembly 得到了一个新的基准编译器为那些含有更大的 WebAssembly 模块的复杂网站的更快启动服务(比如说 Google Earth 和 AutoCAD)。根据硬件不同,我们观察到了 10倍 以上的启动加速。并将会发布一篇博客来详细解析其中的细节。

Faster DataView operations

在 V8 Torque 中,DataView 的方法被重新实现了一遍,将一个消耗很大的调用放到了C++中执行,而之前的实现则是在运行时直接运行。此外我们现在在 Turbofan 中将 JavaScript 代码编译时,将 DataView 的方法进行了内联,这更进一步提升了 hot 代码的峰值性能。现在使用 DataViews 已经和使用 TypedArrays 一样高效了,并最终使得 DataViews 成为了一个性能敏感情况下的可选项。并将会发布一篇博客来详细解析其中的细节。

Faster processing of WeakMaps during garbage collection

V8 v6.9 版本通过优化 WeakMap 处理,进一步减少了 Mark-Compact 垃圾回收的暂停时间。并发及增量标记现在可以处理 WeakMap 了,而之前这些所有工作都是在最终 Mark-Compact 的暂停中完成的。鉴于并非所有的工作都可以被移出到这个暂停时间之外,GC 仍旧会在并行回收中执行更多工作以期降低暂停时间。这些优化工作使得 Web Tooling Benchmark 中的 Mark-Compact 平均暂停时间减半了。

WeakMap 的处理使用了一个 fixed-point iteration 算法,在某些情况下可以将问题降到二次方程式运行时行为来处理。而在新的发布版本中,V8 切换到了另一种算法,如果 GC 不能在一定的迭代内完成的话,也能保证 GC 可以在现行的时间消耗内完成。之前,最糟的情况可能将 GC 暂停数秒,即便是一个很小的堆内存,而这种线性的算法可以在数毫秒之内完成。

V8 API

Please use git log branch-heads/6.8..branch-heads/6.9 include/v8.h to get a list of the API changes.

Developers with an active V8 checkout can use git checkout -b 6.9 -t branch-heads/6.9 to experiment with the new features in V8 v6.9. Alternatively you can subscribe to Chrome’s Beta channel and try the new features out yourself soon.

EOF

Published 2018/8/10

Some tech & personal blog posts