TL;DR

実行時コンパイル(Just-In-Time compilation)。ソフトウェアの実行中に、ソースコードや中間コードを機械語にコンパイルする方式である。実行前にコンパイルする方式は AoT と呼ぶ。

なぜ必要か

Wikipedia によると、OS や CPU に依存しないソースコードや中間コードでソフトウェアを配布できる。実行時に機械語へ変換するので、インタプリタで解釈しながら実行するより速く動く。実行環境の CPU やメモリが分かった状態でコンパイルするので、その環境に合ったコードを生成できる。

仕組み

多くの処理系は適応的コンパイルを採る。起動直後はインタプリタで実行し、繰り返し実行されるコードをプロファイリングで見つけて、その部分だけをコンパイルする。実行時間の大半は一部のコードに集中するという経験則を使い、起動時の負担を抑える。

例

Java の HotSpot は適応的コンパイルを本格的に採用した。JavaScript エンジンの V8 や、.NET も JIT を使う。

注意点

コンパイルにかかる時間が、そのまま実行時間のオーバーヘッドになる。起動が遅くなり、事前コンパイルでできる時間のかかる最適化は行えない。コンパイル結果を保持するので、メモリの使用量も増えることがある。

関連

出典