2013-08-20 9 views
15

HotSpot's tiered compilation verwendet den Interpreter, bis ein Schwellenwert von Invokationen (für Methoden) oder Iterationen (für Schleifen) eine Clientkompilierung mit Selbstprofilierung auslöst. Die Clientkompilierung wird verwendet, bis ein weiterer Schwellenwert von Aufrufen oder Iterationen eine Serverkompilierung auslöst.Was steuert CompileThreshold, Tier2CompileThreshold, Tier3CompileThreshold und Tier4CompileThreshold?

Printing HotSpot's flags zeigt die folgenden Flagwerte mit -XX: + TieredCompilation.

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

Es gibt zu viele Flags nur für einen Client und einen Server-Compiler. Welche Compiler werden von diesen Flags gesteuert? Wenn nicht Client und Server, was ist der Zweck der zusätzlichen Compiler?

Werden CompileThreshold und Tier2CompileThreshold in diesem Fall ignoriert? Was steuert Tier3CompileThreshold, wenn eine Clientkompilierung ausgelöst wird? Was steuert Tier4CompileThreshold, wenn eine Serverkompilierung ausgelöst wird?

Antwort

18

Die Kommentare in advancedThresholdPolicy.hpp diskutieren die verschiedenen Compilerstufen und die Schwellenwerte. Sehen Sie sich diese Datei für eine tiefere Diskussion an.

Das System unterstützt 5 Ablaufebenen:

  • Tier 0 - Interpreter
  • Tier 1 - C1 mit voller Optimierung (keine Profilierungs)
  • Tier 2 - C1 mit Aufruf- und backedge Zähler
  • Stufe 3 - C1 mit vollständiger Profilerstellung (Stufe 2 + MDO)
  • Tier 4 - C2

C1 ist der Client-Compiler. C2 ist der Server-Compiler.

Im allgemeinen Fall geht die Kompilierung: 0 → 3 → 4. Atypische Fälle werden basierend auf den Warteschlangenlängen C1 und C2 verwendet. Stufe 2 wird verwendet, wenn die Länge der C2-Warteschlange zu lang ist, so dass die Methode etwa 30% schneller ausgeführt werden kann, bis die C2 die Profilierungsinformationen verarbeiten kann. Wenn festgestellt wird, dass die Methode trivial ist, wird sie mit Tier 1 kompiliert, da sie den gleichen Code wie Tier 4 erzeugt.

Schwellenwerte werden basierend auf der Länge der C1- und C2-Warteschlangen dynamisch angepasst.