代わりに、ホットスポットでのオンスタック交換の標準JITコンパイル

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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=239831&siteId=1