Tehreem:
私は、Java HotSpot VMの中でC1を使用して代わりに、OSRの標準JITコンパイルの結果を参照しようとしています。私が使用してOSRオフになっている-XX:-UseOnStackReplacement
と、使用してC1にコンパイルを制限します-XX:TieredStopAtLevel=1
。しかし、今、私の方法は、すべてではコンパイル取得されていません。私は、コンパイルを印刷している私はそれがOSRを使用させた場合にうまくコンパイルをログに記録され、オン。また、私のブレークポイントのどれもOSRせずにC1ファイルでヒットを取得されていません。
私はこれをテストするために非常に簡単なコードスニペットを使用しています
class Demo {
public static void main(String[] args) {
int a = workload();
System.out.println("Calculated answer is: " + a);
}
private static int workload() {
int a = 14;
for (int i = 0; i<100000; i++) {
a = a + i;
}
return a;
}
}
ユージン:
問題は、あなたが呼び出すことでworkload
、一度だけ、そのループを何度も実行します。あなたはされていない実行workload
を何回も。それはあなたがここに持っている主な問題です。JIT
方法を最適化するが、ここですることができますが、単一のループを持っている-そうしない限り、OSR
アクティブで最適化するために、あまりありません。
これは、あなたとあなたの方法を実行することができ、証明することはかなり簡単です:
-XX:+UnlockDiagnosticVMOptions
-XX:TieredStopAtLevel=1
-XX:+TraceNMethodInstalls // this is to track the compiled methods
-XX:-UseOnStackReplacement
com.so.jit.OSRCompilation // this is the classname I've used
あなたが得ることの出力では、あなたは多くのを見ることができますInstalling method
。
しかし、あなたが戻って有効にした場合OSR
:
-XX:+UnlockDiagnosticVMOptions
-XX:TieredStopAtLevel=1
-XX:+TraceNMethodInstalls // this is to track the compiled methods
-XX:+UseOnStackReplacement
com.so.jit.OSRCompilation // this is the classname I've used
あなたはたくさんのでしょうInstalling method
、だけでなく、 1行を:
Installing osr method (1) com.so.jit.OSRCompilation.workload()I @ 5