実行時コンパイラ
↑ an overview of TraceMonkey ✩ hacks.mozilla.org
上記以外にもJITコンパイルは実行環境を知った上でそれに応じた生成コードの選択や最適化が可能という利点もある。
一例として、インテルのx86 CPUの場合、IA-32アーキテクチャの範囲内でCPU世代毎に命令が拡張されてきたが、アプリケーションの後方互換性を保持しようとすると、80386と互換の命令しか使うことができない。例えば、MMX PentiumのMMX命令は80386やPentiumでは実行できない。JIT方式ではCPUがMMXをサポートしているならMMX命令を使ったコードを生成し、そうでなければ多少効率の悪いPentiumの命令範囲内で実行する、ということができる。
また、実行環境のキャッシュやメモリのサイズ、速度特性などは実行時にならないとわからないが、JITコンパイルでは実行中のCPUやメモリの情報を知ることができる。このためそれに応じたコードを生成し、事前コンパイルよりも優れたコードを生成できる可能性がある。
さらに、オブジェクト指向言語では仮想メソッドの呼び出しは仮想関数表を経由した間接呼び出しになるが、動的コンパイルでは、そのメソッドをオーバーライド定義したサブクラスが存在しない限り、間接呼び出しを静的束縛として呼び出したり、インライン展開することができる(そのメソッドをオーバーライドするサブクラスが動的にロードされる可能性があるが、その場合はこのコンパイルされたメソッドは最適化戻し (deoptimize) される必要がある)。