Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
V8のJITコンパイルを完全に理解するLT
Search
わんこ(Wanko_IT)
June 23, 2025
Programming
62
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
12
関数型プログラミングのメリットって何だろう?
wanko_it
0
300
バックエンドにElysiaJSを採用して気付いた、良い点・悪い点
wanko_it
1
490
安易なコード批判はやめよう
wanko_it
0
91
『リコリス・リコイル』に学ぶ!! 〜キャリア戦略における計画的偶発性理論と変わる勇気の重要性〜
wanko_it
2
1.3k
Other Decks in Programming
See All in Programming
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
320
Modernizing iOS Apps
seyfoyun
0
150
Enforcing Your Architecture with Unit Tests in the AI Era (Swift Connection X)
steliosf
PRO
1
110
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
600
そのデザイントークン、Flutterでも同じ見た目になりますか?
nakamizu
0
270
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
1.3k
Python Lambdaにおけるテストしやすい設計とAI支援の活用 / Designing Testable Python Lambda Functions with AI
kitano_yuichi
1
280
プロジェクトコードをキレイキレイしよう!暗黙的な参照を読み解く静的解析
ostk0069
0
200
Engineering Biometric UX Across Android Versions | DroidKnights 2026
ryunen344
0
130
LLM 101
dalinaum
0
450
SFCで実現する病院・医療システムの動的組み立て式UI
koukimiura
1
160
AmebaブログはKMPから卒業します
kmars0605
0
310
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
960
Technical Leadership for Architectural Decision Making
baasie
3
620
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
350
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
450
The Cult of Friendly URLs
andyhume
79
7.1k
Color Theory Basics | Prateek | Gurzu
gurzu
1
510
4 Signs Your Business is Dying
shpigford
187
23k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
600
Navigating Weather and Climate Data
rabernat
0
580
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.3k
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を使いこなすために、型を意識しよう!!