2013-08-20 16 views
15

HotSpotのtiered compilationは、呼び出しのしきい値(メソッドの場合)または繰り返し(ループの場合)が自己プロファイリングを使用してクライアントのコンパイルをトリガーするまでインタプリタを使用します。クライアントのコンパイルは、呼び出しまたは反復の別のしきい値がサーバーのコンパイルをトリガーするまで使用されます。CompileThreshold、Tier2CompileThreshold、Tier3CompileThreshold、およびTier4CompileThresholdの制御は何ですか?

Printing HotSpot's flagsは、-XX:+ TieredCompilationで次のフラグ値を示します。

intx CompileThreshold  = 10000 {pd product}   
intx Tier2CompileThreshold = 0  {product}   
intx Tier3CompileThreshold = 2000 {product}   
intx Tier4CompileThreshold = 15000 {product}   

クライアントとサーバーのコンパイラにはフラグが多すぎます。これらのフラグによってどのコンパイラが制御されていますか?クライアントとサーバーではない場合、追加のコンパイラの目的は何ですか?

この場合、CompileThresholdとTier2CompileThresholdは無視されますか?クライアントのコンパイルがトリガーされたとき、Tier3CompileThresholdは何を制御しますか? Tier4CompileThresholdは、サーバーのコンパイルがトリガーされたときに何を制御しますか?

答えて

18

advancedThresholdPolicy.hppのコメントでは、さまざまなコンパイラ層としきい値について説明しています。詳細は、そのファイルを参照してください。

システムは、5つの実行レベルサポート:

  • ティア0 - インタプリタを
  • ティア1 - 完全な最適化(NOプロファイリング)
  • ティア2とC1 - 呼び出しとbackedgeカウンタとC1
  • 階層3 - フルプロファイリング(レベル2 + MDO)を持つC1
  • 層4 - C2

C1はクライアントコンパイラです。 C2はサーバーコンパイラです。

一般的なケースでは、コンパイルは0→3→4となります。C1とC2のキュー長に基づいて非定型のケースが使用されます。 C2キューの長さが長すぎると、C2がプロファイリング情報を処理できるまでにメソッドが約30%高速に実行できるように、Tier 2が使用されます。メソッドが自明であると判断された場合、Tier 4と同じコードが生成されるため、Tier 1でコンパイルされます。

しきい値はC1キューとC2キューの長さに基づいて動的に調整されます。

関連する問題