トレーシング実行時コンパイル
トレーシング実行時コンパイル(トレーシングじっこうじコンパイル、トレーシングJIT、英: Tracing just-in-time compilation)は、プログラムの実行を最適化するために、実行時(runtime)に仮想マシンが用いる技術の一つ。頻繁に実行される演算の並びを記録し、それをネイティブコードにコンパイルしてから実行する。通常の実行時コンパイラ(just-in-time compiler、JIT)はメソッド毎にこれを行っており、この点が異なる。
次のプログラムを考える。1から10000までのすべての数の平方の和を計算している。
以下はこのプログラムのトレース例である:
square関数のコールがインライン化されていることと、if 文がguard_falseに変換されている。
トレーシングフェーズ下ではループの実行は通常通りだが、加えてすべての実行された演算がトレースに記録される。記録される演算はたいていは中間言語として保存される。ループ内からの関数コールも追跡され、場合によってはトレース内にインライン展開される。トレーシングはループが終了するかスタート点にジャンプするまで継続される。
トレースが記録できるのは、ある1つの実行パス条件のみであり、その後の実行がこの記録された実行パスとは異なる条件で実行される場合も考えられる。条件が同じかどうかを判定するためにガード命令がトレースに挿入される場合がある。if 文は挿入される場所の一例である。ガードは仮定していた条件が成り立っているかどうかを判定する。条件が成り立っていなければトレースは中止させられる。
トレーシングは実行時において行われるため実行時情報を含むことができる(例、実行時型情報)。この情報は最適化においてコードの品質を上げるのに使うことができる。