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
63
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
500
安易なコード批判はやめよう
wanko_it
0
93
『リコリス・リコイル』に学ぶ!! 〜キャリア戦略における計画的偶発性理論と変わる勇気の重要性〜
wanko_it
2
1.3k
Other Decks in Programming
See All in Programming
Vue.jsで作る空間解析アプリとCapacitorプラグインのData Bridge
hal_spidernight
1
160
そのデザイントークン、Flutterでも同じ見た目になりますか?
nakamizu
0
310
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
420
Materialが消えた日 〜真っ白なFlutterキャンバスにRenderObjectで絵を描く〜
umigishiaoi
0
150
Getting Started with Vibe Coding
miccheng
0
190
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
360
graphql-ruby を Spinel で速くしようとした話
mtsmfm
0
140
AI-Powered Domain-Driven Design
ziobrando
0
410
自作Discord音声botをLambda MicroVMsに移行した話 / Migrating My Discord Voice Bot to Lambda MicroVMs
akihisaikeda
1
290
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
240
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.7k
AIが実装を担う時代の「技術設計」と「チームマネジメント」
kamina_zzz
2
220
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.2k
Navigating Team Friction
lara
192
16k
Between Models and Reality
mayunak
4
560
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
560
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
470
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
420
Making Projects Easy
brettharned
120
6.8k
Deep Space Network (abreviated)
tonyrice
0
410
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
760
Ethics towards AI in product and experience design
skipperchong
2
460
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
910
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
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を使いこなすために、型を意識しよう!!