TL;DR
実行時コンパイル(Just-In-Time compilation)。ソフトウェアの実行中に、ソースコードや中間コードを機械語にコンパイルする方式である。実行前にコンパイルする方式は AoT と呼ぶ。
なぜ必要か
Wikipedia によると、OS や CPU に依存しないソースコードや中間コードでソフトウェアを配布できる。実行時に機械語へ変換するので、インタプリタで解釈しながら実行するより速く動く。実行環境の CPU やメモリが分かった状態でコンパイルするので、その環境に合ったコードを生成できる。
仕組み
多くの処理系は適応的コンパイルを採る。起動直後はインタプリタで実行し、繰り返し実行されるコードをプロファイリングで見つけて、その部分だけをコンパイルする。実行時間の大半は一部のコードに集中するという経験則を使い、起動時の負担を抑える。
例
Java の HotSpot は適応的コンパイルを本格的に採用した。JavaScript エンジンの V8 や、.NET も JIT を使う。
注意点
コンパイルにかかる時間が、そのまま実行時間のオーバーヘッドになる。起動が遅くなり、事前コンパイルでできる時間のかかる最適化は行えない。コンパイル結果を保持するので、メモリの使用量も増えることがある。