JVM の実行モデル
🐱 この章の目次
JVM とは何か
JVM(Java Virtual Machine) はバイトコードを実行する仮想マシンです。
Python が .py ファイルを直接インタプリタで実行するのとは異なり、JVM ではソースコードを事前にコンパイルしてから実行します。
この「コンパイルしてから実行」というモデルが、JVM の性能と安全性の土台になっています。
コンパイルから実行まで
Java のソースコード .java はコンパイラ javac によって .class ファイル(バイトコード)に変換されます。
JVM はこの .class ファイルを読み込み、実行時に JIT(Just-In-Time)コンパイラ がネイティブコードへ変換します。
HotSpot JVM の C1/C2 コンパイラが頻繁に実行されるコードを最適化するため、長時間動作するサーバーほど高速になります。
# Java のコンパイルと実行
javac Main.java # Main.class が生成される
java Main # JVM がバイトコードを実行
# Python の実行(比較用)
python main.py # インタプリタが直接実行
マルチ言語プラットフォーム
JVM 上では Java だけでなく、Kotlin、Scala、Clojure など複数の言語が動作します。
すべての言語が同じ .class バイトコードに変換されるため、ライブラリを言語を超えて共有できます。
Python で例えるなら、CPython・PyPy・Cython が同じ仮想マシン上で動くようなイメージです。
Python との比較
| Python | JVM | |
|---|---|---|
| ソースファイル | .py | .java / .kt |
| 中間形式 | バイトコード(自動生成) | .class(明示的コンパイル) |
| ランタイム | CPython インタプリタ | HotSpot JVM |
| JIT | PyPy のみ | 常に有効(HotSpot C1/C2) |
CPython もバイトコード(.pyc)を内部的に生成しますが、開発者が意識することはほぼありません。
JVM では .class ファイルの生成が明示的なステップであり、この違いがビルドツールの必要性につながります。