Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
V8のJITコンパイルを完全に理解するLT
Search
わんこ(Wanko_IT)
June 23, 2025
Programming
40
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
V8のJITコンパイルを完全に理解するLT
akihabara.any #3にて発表した際に使った資料です。(多少修正しています)
正しく理解できていない部分があるようなので、参考程度にご覧ください。
わんこ(Wanko_IT)
June 23, 2025
More Decks by わんこ(Wanko_IT)
See All by わんこ(Wanko_IT)
関数型プログラミングのメリットって何だろう?
wanko_it
0
120
バックエンドにElysiaJSを採用して気付いた、良い点・悪い点
wanko_it
1
340
安易なコード批判はやめよう
wanko_it
0
77
『リコリス・リコイル』に学ぶ!! 〜キャリア戦略における計画的偶発性理論と変わる勇気の重要性〜
wanko_it
2
1.1k
Other Decks in Programming
See All in Programming
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
8.6k
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
0
330
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
470
Contextとはなにか
chiroruxx
1
390
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
440
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
300
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
Performance Engineering for Everyone
elenatanasoiu
0
250
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
250
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
190
Webフレームワークの ベンチマークについて
yusukebe
0
190
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
7
2.5k
Featured
See All Featured
Ethics towards AI in product and experience design
skipperchong
2
320
Building the Perfect Custom Keyboard
takai
2
810
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Context Engineering - Making Every Token Count
addyosmani
9
1k
AI: The stuff that nobody shows you
jnunemaker
PRO
8
770
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Writing Fast Ruby
sferik
630
63k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
How to Talk to Developers About Accessibility
jct
2
280
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
180
Transcript
V8のJITコンパイルを 完全に理解するLT 2025/6/20 akihabara.any #3 わんこ(Twitter: @Wanko_IT)
自己紹介 • 清水 日向 (シミズ ヒナタ) • Twitter: わんこ(@Wanko_IT) •
所属 ◦ 株式会社レコチョク ◦ フロントエンドエンジニア ◦ バックエンドも触ります(PHP)
• JITコンパイルの基本概念 • V8におけるJITコンパイルの仕組み ◦ Ignition ◦ TurboFan お話すること
JITコンパイルの基本概念
コンパイルには2種類ある 1. AOT(Ahead-of-Time)コンパイル > 主に静的型付け言語で採用。実行前にコードを分析して機械語へ変換 2. JIT(Just-in-Time)コンパイル > 主に動的型付け言語で採用。実行中にコードを分析して機械語へ変換 重要:
これらコンパイルでは型情報をもとにして処理の最適化も行っています JITコンパイルとは
JITコンパイルの目的 > 動的型付け言語において、処理を高速化すること ex. JavaScript, PHP, Ruby, Python なぜ必要? >
型の柔軟性のために、型チェック等の冗長な処理が実行される > 柔軟性は捨てたくない、でも実行も速くしたい > 実行中の情報をもとに型を特定して最適化しよう!! (= JIT) JITコンパイルの目的
より具体的には何をしている? 1. コード実行中の情報を収集し、分析する(プロファイリング) 2. 頻繁に呼び出されるコード(ホットスポット)を特定 3. 分析情報(型など)をもとに、ホットスポットを高速な機械語に変換 4. 頻繁に走る処理が高速化されることで、全体の実行時間が大幅に短縮 JITコンパイルの詳細
V8のJITコンパイル
V8の処理の流れ(Ignition) AST(抽象構文木) バイトコード(中間表現) インタープリタが逐次解釈しながら実行!!
Ignitionがコードの実行中に行っていること 1. プロファイリング(実行情報の収集) ◦ 関数の呼び出し頻度 ◦ ループの繰り返し回数 ◦ 変数の型 2.
Inline Caches(ICs)の生成 ◦ オブジェクトのプロパティ・メソッド情報 V8の処理の流れ(Ignition)
V8の処理の流れ(TurboFan) プロファイル・ICs 機械語(最適化済み) 機械語実行により、爆速に!!
TurboFanは具体的には何してる? 1. プロファイルを参照して、ホットスポットを確認 2. プロファイル・ICsをもとに、特定の型に特化した機械語を生成 3. 柔軟性は失われるが、冗長性を排した高速な機械語が完成 4. ホットスポットが最適化されることで、全体としてパフォーマンスUP!! V8の処理の流れ(TurboFan)
疑問: 機械語に想定外の型が渡ってきたら? 1. 機械語の型チェックにより想定外の型だと認識される 2. 処理を続行するとエラーが発生するので、バイトコードに引き継ぐ 3. いままで使っていた機械語は危険なので破棄される (非最適化) 4.
結果的に、全体のパフォーマンスが下がる結果に... V8の処理の流れ(TurboFan) JITを使いこなすために、型を意識しよう!!