跳到主要内容

Orinoco:年轻代垃圾回收

· 阅读需 8 分钟
乌兰·德根巴耶夫、迈克尔·利普奥茨和汉内斯·派尔,[TSAN](https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual)的朋友们

在V8中,JavaScript对象被分配到由V8垃圾回收器管理的堆上。在之前的博客文章中,我们已经讨论了如何减少垃圾回收暂停时间不止一次)以及内存消耗。在这篇博客文章中,我们介绍了并行Scavenger,这是V8的主要并发和并行垃圾回收器Orinoco的最新功能之一,并讨论了设计决策以及我们实施的一些备选方法。

驯服 V8 架构复杂性——CodeStubAssembler

· 阅读需 11 分钟
[Daniel Clifford](https://twitter.com/expatdanno),CodeStubAssembler 组装器

在这篇文章中,我们想介绍 CodeStubAssembler(CSA),这是 V8 中的一个组件,它在最近几个 V8 版本的 大幅度 性能 提升 中发挥了重要作用。CSA 还显著提高了 V8 团队在低层快速优化 JavaScript 功能的能力,同时保持高度可靠性,从而提升了团队的开发效率。

宣布 Web Tooling Benchmark

· 阅读需 6 分钟
Benedikt Meurer([@bmeurer](https://twitter.com/bmeurer)),JavaScript 性能协调员

JavaScript 性能对 V8 团队来说一直很重要,在这篇文章中,我们希望讨论一个新的 JavaScript Web Tooling Benchmark。我们最近正在使用它来识别和修复 V8 中的一些性能瓶颈。您可能已经知道 V8 对 Node.js 的强烈承诺,而这个基准测试进一步延续了这一承诺,特别是通过运行基于 Node.js 构建的常见开发者工具的性能测试。Web Tooling Benchmark 中包含的工具是现代开发者和设计师今天使用的构建现代网站和基于云的应用程序的工具。为了继续我们专注于 现实场景性能 而不是人工基准测试的努力,我们使用开发者每天运行的实际代码创建了这个基准测试。

V8发布v6.3

· 阅读需 3 分钟
V8团队

每隔六周,我们都会创建一个新的V8分支,作为我们发布流程的一部分。每个版本都在Chrome Beta里程碑之前从V8的Git主分支分离出来。今天,我们很高兴地宣布我们最新的分支,V8版本6.3,它将在未来几周与Chrome 63稳定版协调发布前处于测试阶段。V8 v6.3充满了各种面向开发者的亮点。此帖子提供了一些亮点的预览,以期待发布。

优化 V8 中的 ES2015 代理

· 阅读需 8 分钟
Maya Armyanova([@Zmayski](https://twitter.com/Zmayski)),代理优化师

代理自 ES2015 起便成为 JavaScript 的重要组成部分。它们允许拦截对象的基本操作并自定义其行为。代理是 jsdomComlink RPC 库 等项目的核心部分。最近,我们在提升 V8 中代理的性能方面投入了不少精力。本文将介绍 V8 的总体性能改进模式,并特别说明针对代理的改进。

关于懒惰的实习:被优化函数的懒惰取消链接

· 阅读需 12 分钟
Juliana Franco ([@jupvfranco](https://twitter.com/jupvfranco)), 懒惰性专家

大约三个月前,我作为实习生加入了V8团队(Google Munich),从那时起,我一直在研究虚拟机的 去优化器 —— 这是对我来说全新的领域,但也证明了是一个有趣且具挑战性的项目。实习的第一部分重点在于提高虚拟机的安全性。第二部分则集中于性能改进,即删除用于取消链接以前被优化的函数的数据结构,而这个结构在垃圾回收时是性能瓶颈。本博客文章描述了我实习的第二部分。我将解释V8过去如何取消链接被优化的函数,我们如何对其进行更改,以及获得了哪些性能提升。

暂时禁用逃逸分析

· 阅读需 2 分钟
Mathias Bynens ([@mathias](https://twitter.com/mathias)), 沙盒逃逸分析员

在 JavaScript 中,一个分配的对象如果从当前函数外部可以访问,就被称为 逃逸。通常情况下,V8 会在 JavaScript 堆中分配新对象,但通过 逃逸分析,优化编译器可以确定一个对象是否可以特殊处理,因为其生命周期被证明仅限于函数的激活状态。当对新分配对象的引用不会逃逸创建它的函数时,JavaScript 引擎不需要显式地在堆中分配该对象。相反,它们可以有效地将对象的值视为函数的局部变量。这反过来又启用了各种优化,如将这些值存储在堆栈或寄存器中,或者在某些情况下完全优化掉这些值。逃逸的对象(更准确地说,不能证明其不会逃逸的对象)必须在堆中分配。

V8中的元素种类

· 阅读需 15 分钟
Mathias Bynens ([@mathias](https://twitter.com/mathias))
备注

注意: 如果你更喜欢观看演示而不是阅读文章,那么请欣赏下面的视频!

JavaScript对象可以拥有与之相关的任意属性。对象属性的名称可以包含任何字符。JavaScript引擎可以选择优化的一种有趣场景是属性名称纯粹为数字的情况,尤其是数组索引

V8发布v6.2

· 阅读需 5 分钟
V8团队

每六周,我们都会按照发布流程创建一个新的V8分支。每个版本都会在Chrome Beta里程碑之前直接从V8的Git主分支分支出来。今天我们很高兴地宣布我们的最新分支,V8版本6.2,它将在几周内随Chrome 62 Stable协调发布前处于测试阶段。V8 v6.2为开发者带来了各种各样的好东西。这篇文章提供了一些亮点的预览,以期待正式发布。

V8中的快速属性

· 阅读需 13 分钟
Camillo Bruni ([@camillobruni](https://twitter.com/camillobruni)),也是[“Fast `for`-`in`”](/blog/fast-for-in)的作者

在这篇博客中,我们想解释一下V8如何在内部处理JavaScript属性。从JavaScript的角度来看,属性的区分需求只有少数几种。JavaScript对象大多像字典一样工作,具有字符串键和任意对象值。然而,规范在迭代期间将整数索引属性和其他属性区别对待。除此之外,不论属性是否是整数索引,它们的行为大致相同。