An Internship on Laziness: Lazy Unlinking of Deoptimized Functions
Roughly three months ago, I joined the V8 team (Google Munich) as an intern and since then I’ve been working on the VM’s Deoptimizer— something completely new to me which proved to be an interesting...
View ArticleOptimizing ES2015 proxies in V8
IntroductionProxies have been an integral part of JavaScript since ES2015. They allow intercepting fundamental operations on objects and customizing their behavior. Proxies form a core part of projects...
View ArticleV8 Release 6.3
Every six weeks, we create a new branch of V8 as part of our release process. Each version is branched from V8’s git master immediately before a Chrome Beta milestone. Today we’re pleased to announce...
View ArticleV8 💚 developers and their tools
JavaScript performance has always been important to the V8 team, and in this post we would like to discuss a new JavaScript Web Tooling Benchmark that we have been using recently to identify and fix...
View ArticleTaming architecture complexity in V8 — the CodeStubAssembler
In this post we’d like to introduce the CodeStubAssembler (CSA), a component in V8 that has been a very useful tool in achieving some bigperformancewins over the last several V8 releases. The CSA also...
View ArticleOrinoco: young generation garbage collection
JavaScript objects in V8 are allocated on a heap managed by V8’s garbage collector. In previous blog posts we have already talked about how we reduce garbage collection pause times (more than once) and...
View ArticleJavaScript code coverage
What is it?Code coverage provides information about whether, and optionally how often certain parts of an application have been executed. It’s commonly used to determine how thoroughly a test suite...
View ArticleV8 release v6.4
Every six weeks, we create a new branch of V8 as part of our release process. Each version is branched from V8’s Git master immediately before a Chrome Beta milestone. Today we’re pleased to announce...
View ArticleChrome welcomes Speedometer 2.0!
Ever since its initial release of Speedometer 1.0 in 2014, the Blink and V8 teams have been using the benchmark as a proxy for real-world use of popular JavaScript frameworks and we achieved...
View ArticleOptimizing hash tables: hiding the hash code
ECMAScript 2015 introduced several new data structures such as Map, Set, WeakSet, and WeakMap, all of which use hash tables under the hood. This post details the recent improvements in how V8 v6.3+...
View ArticleV8 release v6.5
Every six weeks, we create a new branch of V8 as part of our release process. Each version is branched from V8’s Git master immediately before a Chrome Beta milestone. Today we’re pleased to announce...
View ArticleLazy deserialization
TL;DR: Lazy deserialization was recently enabled by default in V8 version 6.4, reducing V8’s memory consumption by over 500 KB per browser tab on average. Read on to find out more!Introducing V8...
View ArticleTracing from JS to the DOM and back again
SummaryDebugging memory leaks in Chrome 66 just became much easier. Chrome’s DevTools can now trace and snapshot C++ DOM objects and display all reachable DOM objects from JavaScript with their...
View ArticleBackground compilation
TL;DR: Starting with Chrome 66, V8 compiles JavaScript source code on a background thread, reducing the amount of time spent compiling on the main thread by between 5% to 20% on typical...
View ArticleV8 release v6.6
Every six weeks, we create a new branch of V8 as part of our release process. Each version is branched from V8’s Git master immediately before a Chrome Beta milestone. Today we’re pleased to announce...
View ArticleImproved code caching
V8 uses code caching to cache the generated code for frequently-used scripts. Starting with Chrome 66, we are caching more code by generating the cache after top-level execution. This leads to a 20-40%...
View ArticleAdding BigInts to V8
Over the past couple of months, we have implemented support for BigInts in V8, as currently specified by this proposal, to be included in a future version of ECMAScript. The following post tells the...
View ArticleV8 release v6.7
Every six weeks, we create a new branch of V8 as part of our release process. Each version is branched from V8’s Git master immediately before a Chrome Beta milestone. Today we’re pleased to announce...
View ArticleConcurrent marking in V8
This post describes the garbage collection technique called concurrent marking. The optimization allows a JavaScript application to continue execution while the garbage collector scans the heap to find...
View ArticleV8 release v6.8
Every six weeks, we create a new branch of V8 as part of our release process. Each version is branched from V8’s Git master immediately before a Chrome Beta milestone. Today we’re pleased to announce...
View ArticleV8 release v6.9
Every six weeks, we create a new branch of V8 as part of our release process. Each version is branched from V8’s Git master immediately before a Chrome Beta milestone. Today we’re pleased to announce...
View ArticleEmbedded builtins
V8 built-in functions (builtins) consume memory in every instance of V8. The builtin count, average size, and the number of V8 instances per Chrome browser tab have been growing significantly. This...
View ArticleLiftoff: a new baseline compiler for WebAssembly in V8
img{max-width:100%;}V8 v6.9 includes Liftoff, a new baseline compiler for WebAssembly. Liftoff is now enabled by default on desktop systems. This article details the motivation to add another...
View ArticleCelebrating 10 years of V8
figure { margin: 1em 0;} figcaption { text-align: center; font-size: 90%; } figure, img { max-width: 100%; height: auto; } This month marks the 10-year anniversary of shipping not just Google Chrome,...
View ArticleImproving DataView performance in V8
figure { margin: 1em 0;} figcaption { text-align: center; font-size: 90%; } figure, img { max-width: 100%; height: auto; } DataViews are one of the two possible ways to do low-level memory accesses in...
View Article