JIT(Just-In-Time)コンパイル
実行時コンパイル言語
JITコンパイルとは
JIT(Just-In-Time)コンパイルは、実行時にバイトコードをネイティブコードに変換する技術です。 インタプリタの柔軟性とコンパイル言語の実行速度を両立します。 頻繁に実行される「ホットスポット」を検出し、選択的に最適化します。
JITの実行フロー
2段階コンパイル
ソースコード
.java
javac
静的コンパイル
バイトコード
.class
バイトコード
JVM
インタプリタ実行
JIT
ホットスポット検出
ネイティブ
高速実行
ウォームアップ: JIT最適化には時間がかかる。 起動直後はインタプリタ実行で遅く、しばらくすると高速になる。 これを「ウォームアップ」と呼ぶ。
JITの特徴
メリット
- ✓ 実行時最適化 - 実際の使用パターンに基づく最適化
- ✓ プラットフォーム非依存 - バイトコードがどこでも動作
- ✓ 動的最適化 - インライン展開、デッドコード除去
- ✓ プロファイル駆動 - ホットパスを重点的に最適化
デメリット
- △ 起動時間 - ウォームアップが必要
- △ メモリ使用 - JITコンパイラ自体がメモリを消費
- △ 予測困難 - 実行時の最適化で性能が変動
- △ 複雑性 - GC、JITのチューニングが複雑
実行モデルの比較
| 観点 | コンパイル型 | JIT | インタプリタ型 |
|---|---|---|---|
| 実行速度 | 最速 | 高速(ウォームアップ後) | 遅い |
| 起動時間 | 速い | 遅い | 速い |
| メモリ | 効率的 | 多め | 中程度 |
| 最適化 | 静的 | 動的(実行時情報活用) | なし |
| ポータビリティ | 再コンパイル必要 | バイトコード共通 | 高い |
代表的なJIT言語/ランタイム
Java
JVM上で動作、エンタープライズの標準
Kotlin
JVM上で動作、Androidの公式言語
C# (.NET)
CLR上で動作、Windows/Azure
JavaScript (V8)
Chrome/Node.js、高度なJIT最適化