v8エンジンとブラウザ周りの関係

そもそもv8エンジンはJavaScriptのエンジンらしいが、
ブラウザとその辺りの関係性がよくわかってないのでまとめてみた。

v8エンジンとブラウザ周りの関係


  • ブラウザの構成要素は、主にHTMLレンダリングエンジンとJavaScriptエンジンでできている。
  • v8エンジンはChromeで使われているJavaScriptエンジン
  • node.jsは、v8エンジンを使っている
  • v8エンジンは劇速

なぜv8エンジンは劇速?

wikiあった
Google_V8_JavaScript_Engine

Firefoxインタープリタで実行して、統計情報をとって[3]、まず中間コードに変換し、その上でJITコンパイルするが、V8では、中間コードもなく、インタープリタも搭載せずに最初の実行時からコンパイルする

あと、その他見つけたもの。
ここがよくまとまっていた。

Google Chrome に搭載されたオープンソースの JavaScript エンジン "v8" を試す
ざっくりと以下の様だ。

・オブジェクトのプロパティへのアクセスが高速

通常、ハッシュ表や二分木といった辞書による実装
→辞書を開いてめくって探す手間がかかる
v8エンジンは、メモリ内に「hidden class」というものを保持し、オブジェクトのアクセスはメモリのオフセットで行う

・動的なマシンコード生成

中間コードは作らない。
インタプリタでもない。

・効率的なガベージコレクション

プログラムが停止しないよう、一部のガベージコレクションを効率的に、
また速度を気にしながらもメモリ効率などを気にして行う。

最新(2011/04/07)のv8エンジン「Crankshaft」は更に…

頻繁に実行されるコードを重点的に最適化。
そうでないコードは無駄に最適化しない。
→適応的(アダプティブコンパイル手法
これにより、起動速度とピーク性能の両方を強化