メインコンテンツまでスキップ

Orinoco: 若い世代のガベージコレクション

· 約10分
Ulan Degenbaev, Michael Lippautz, and Hannes Payer, [TSAN](https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual)の友人

V8でのJavaScriptオブジェクトは、V8のガベージコレクタによって管理されているヒープ上に割り当てられます。以前のブログ記事では、ガベージコレクションの停止時間を短縮する方法複数回)やメモリ消費量を削減する方法について既に説明しました。本記事では、Orinocoの最新機能の1つである並列スカベンジャーを紹介し、V8のガベージコレクタの設計決定や、進行途中で実装した代替アプローチについて議論します。

V8アーキテクチャの複雑さを飼いならす — CodeStubAssembler

· 約13分
[ダニエル・クリフォード](https://twitter.com/expatdanno)、CodeStubAssembler アセンブラ

この投稿では、CodeStubAssembler(CSA)を紹介します。これは、最近の複数のV8リリースでいくつかの大きな パフォーマンス 向上を達成するために非常に役立ったV8のコンポーネントです。CSAはまた、V8チームが高い信頼性で低レベルのJavaScript機能を迅速に最適化する能力を大幅に向上させ、開発のスピードを向上させました。

Web Tooling Benchmarkを発表

· 約7分
Benedikt Meurer([@bmeurer](https://twitter.com/bmeurer)、JavaScriptパフォーマンスのジャグラー)

JavaScriptのパフォーマンスは常にV8チームにとって重要な課題であり、この投稿では最近使用している新しいJavaScriptWeb Tooling Benchmarkについて説明し、V8のパフォーマンスボトルネックを特定および修正する方法を共有します。既にご存じの方もいるかもしれませんが、V8はNode.jsに対する強いコミットメントを持っており、このベンチマークは特にNode.jsに基づいて構築された一般的な開発者ツールを使ったパフォーマンステストを実施することでそのコミットメントを拡張しています。Web Tooling Benchmarkに含まれるツールは、現代的なウェブサイトやクラウドベースのアプリケーションを構築するために、開発者やデザイナーが現在使用しているものと同じです。実際のパフォーマンスに焦点を合わせる現在進行中の取り組みを継続するために、開発者が毎日実際に使用するコードを基にベンチマークを作成しました。

V8リリースv6.3

· 約4分
V8チーム

6週間ごとに、私たちのリリースプロセスの一環としてV8の新しいブランチを作成します。各バージョンはChrome Betaマイルストーンの直前にV8のGitマスターから分岐されます。本日、私たちは最新のブランチV8バージョン6.3を発表できることを嬉しく思います。このブランチは、数週間後にChrome 63の安定版と連携してリリースされるまでベータ版です。V8 v6.3は、開発者向けの素晴らしい改善が詰まっています。この投稿では、リリースに向けたハイライトのいくつかを予告します。

ES2015プロキシのV8における最適化

· 約9分
Maya Armyanova ([@Zmayski](https://twitter.com/Zmayski)), プロキシの最適化者

プロキシは、ES2015以来JavaScriptの重要な部分を形成しています。これらはオブジェクトの基本操作をインターセプトし、その挙動をカスタマイズすることを可能にします。プロキシは、jsdomComlink RPCライブラリのようなプロジェクトのコア部分を形成しています。最近、V8でプロキシのパフォーマンスを向上させるために多くの努力を行いました。この記事では、V8の一般的なパフォーマンス改善パターンについて、特にプロキシに関する内容を解説します。

怠惰に関するインターンシップ:非最適化された関数の怠惰な解除

· 約15分
ジュリアナ・フランコ ([@jupvfranco](https://twitter.com/jupvfranco)), 怠惰の専門家

約3か月前、私はインターンとしてV8チーム(Googleミュンヘン)に参加し、それ以来VMの_Deoptimizer_に取り組んできました。このプロジェクトは完全に新しいものであり、興味深く挑戦的なものでした。インターンシップの最初の部分ではVMのセキュリティ面の改善に焦点を当てました。そして2つ目の部分ではパフォーマンス改善、具体的には非最適化された関数の解除に使われるデータ構造の削除に取り組みました。このデータ構造はガベージコレクション中にパフォーマンスボトルネックとなっていました。このブログ投稿ではこのインターンシップの2番目の部分について説明します。V8が以前どのように非最適化された関数を解除していたか、どのように変更したか、そしてどのようなパフォーマンス改善が得られたかを説明します。

逃避解析を一時的に無効化

· 約3分
Mathias Bynens ([@mathias](https://twitter.com/mathias)), サンドボックスエスケープ解析者

JavaScriptでは、割り当てられたオブジェクトが現在の関数外でアクセス可能になる場合、オブジェクトが「逃避」したとみなされます。通常、V8は新しいオブジェクトをJavaScriptヒープに割り当てますが、_逃避解析_を使用すると、最適化コンパイラがオブジェクトの寿命が関数のアクティベーションに限定されていることを確証できる場合に、そのオブジェクトを特別に扱えることがわかります。新しく割り当てられたオブジェクトへの参照がそれを生成する関数から逃避しない場合、JavaScriptエンジンはそのオブジェクトをヒープに明示的に割り当てる必要がありません。代わりに、オブジェクトの値を関数のローカル変数として効果的に扱うことができます。それによって、スタックやレジスタにこれらの値を格納したり、場合によっては値を完全に最適化して無くしたりするなどの多種多様な最適化が可能になります。逃避するオブジェクト(正確には逃避しないことを証明できないオブジェクト)は、ヒープに割り当てる必要があります。

V8におけるElementsの種類

· 約19分
Mathias Bynens ([@mathias](https://twitter.com/mathias))
注記

注: 記事を読むよりプレゼンを見る方が好みの方には、以下の動画をぜひお楽しみください!

JavaScriptのオブジェクトは、任意のプロパティを関連付けることができます。オブジェクトプロパティ名には任意の文字が含まれることが可能です。JavaScriptエンジンが最適化を選択する興味深いケースの1つが、名前が純粋に数値であるプロパティ、特に配列インデックスです。

V8 リリース v6.2

· 約6分
V8 チーム

6週間ごとに、新しいブランチを作成するのが私たちのリリースプロセスの一環です。各バージョンは、Chrome Beta マイルストーンの直前に V8 の Git マスターからブランチ化されます。本日、最新ブランチである V8 バージョン 6.2 を発表できることを嬉しく思います。このバージョンは数週間後に Chrome 62 ステーブルと共にリリースされるまでベータ版です。V8 v6.2 は、開発者向けのさまざまな興味深い機能を備えています。この投稿では、リリースを見越していくつかのハイライトを紹介します。

V8での高速なプロパティ

· 約16分
Camillo Bruni([@camillobruni](https://twitter.com/camillobruni))、また[「Fast `for`-`in`](/blog/fast-for-in)」の著者でもあります

この記事では、V8が内部的にJavaScriptプロパティをどのように扱うかを説明したいと思います。JavaScriptの観点からは、プロパティに必要な区別はわずかです。JavaScriptオブジェクトは主に辞書のように振る舞い、キーは文字列であり、値には任意のオブジェクトを使用できます。ただし仕様では、整数インデックス付きのプロパティとその他のプロパティを反復中に異なる扱いをしています。それ以外では、異なるプロパティは、整数インデックス付きであるかどうかに関係なくほぼ同じ動作をします。