🐱 うさねこ教室 Python と可観測性の教室

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 との比較

PythonJVM
ソースファイル.py.java / .kt
中間形式バイトコード(自動生成).class(明示的コンパイル)
ランタイムCPython インタプリタHotSpot JVM
JITPyPy のみ常に有効(HotSpot C1/C2)

CPython もバイトコード(.pyc)を内部的に生成しますが、開発者が意識することはほぼありません。 JVM では .class ファイルの生成が明示的なステップであり、この違いがビルドツールの必要性につながります。