Java JIT は、同じマシンで実行するたびに同じ最適化でバイトコードをコンパイルしますか?
特定の時点での CPU 使用率などの動的な要因を考慮していますか、それとも一時的な要因に関係なく毎回同じ最適化を行いますか?
Java JIT は、同じマシンで実行するたびに同じ最適化でバイトコードをコンパイルしますか?
特定の時点での CPU 使用率などの動的な要因を考慮していますか、それとも一時的な要因に関係なく毎回同じ最適化を行いますか?
いいえ、最適化は非決定的です。まったく同じシングルスレッドの完全に決定論的なプログラムを実行したとしても、最適化するメソッドを決定するために JIT が使用するサンプラーが別のセットを選択する可能性があります。
生成されたマシン コードを変更できるもう 1 つのことは、コードによって参照される特定の定数の実際のメモリ位置です。JIT は、これらのメモリ位置に直接アクセスするマシン命令を発行できるため、異なるパスのマシン コード間に追加の違いが生じます。
Jikes RVMを使用している研究者は、Compiler Replayと呼ばれる機能を使用して、ベンチマークでこの問題に対処しました。