1. ホーム
  2. java

XX:-TieredCompilationは具体的に何をするのですか?

2023-10-14 17:48:39

質問

使用方法 java -XX:+PrintFlagsFinal を見つけたので TieredCompilation フラグを見つけ、それについてネットで少し読みました。

それでも、私はまだ まさに に設定するとどうなるのか。 false .

コンパイルシステムは、基本的にインタプリタ、C1、C2に分割された5つの実行レベルをサポートしていますね。

  • レベル 0 - インタプリタ
  • レベル 1 - C1 と完全な最適化 (プロファイリングなし)
  • レベル 2 - C1 (呼び出しおよびバックエッジ カウンター付き)
  • レベル 3 - 完全なプロファイリングを備えた C1 (レベル 2 + MDO)
  • レベル4 - C2

出典 http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/2b2511bd3cc8/src/share/vm/runtime/advancedThresholdPolicy.hpp#l34

2つの質問です。

(1) -XX:-TieredCompilation を設定することによって、このレベルのいくつかがちょうど無効になりますか?もしそうなら、どのレベルですか?

(2) C1 と C2 のどちらを無効にするか、あるいは全くコンパイルしないかを決定するフラグがありますか?

どのように解決するのですか?

-XX:-TieredCompilation は中間コンパイル層 (1, 2, 3) を無効にし、メソッドが解釈されるか、または最大最適化レベル (C2) でコンパイルされるようにします。

副次的な効果として TieredCompilation フラグは、コンパイラのスレッド数、コンパイルポリシー、 デフォルトのコードキャッシュサイズも変更します。注意点として TieredCompilation は無効です。

C2コンパイラを無効にし、余分なオーバーヘッドを排除したC1のみを残すには、以下のように設定します。 -XX:TieredStopAtLevel=1 .

すべてのJITコンパイラを無効にし、すべてをインタプリタで実行する場合は -Xint .