2013-08-20 16 views
15

HotSpot's używa interpretera, dopóki próg wywołań (dla metod) lub iteracji (dla pętli) nie uruchomi kompilacji klienta z autoprofilowaniem. Kompilacja klienta jest używana, dopóki inny próg wywołań lub iteracji nie spowoduje kompilacji serwera.Co kontroluje CompileThreshold, Tier2CompileThreshold, Tier3CompileThreshold i Tier4CompileThreshold?

Printing HotSpot's flags pokazuje następujące wartości flag z -XX: + TieredCompilation.

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

Jest zbyt wiele flag tylko dla kompilatora klienta i serwera. Jakie kompilatory są kontrolowane przez te flagi? Jeśli nie klient i serwer, jaki jest cel dodatkowych kompilatorów?

Czy w tym przypadku wartości CompileThreshold i Tier2CompileThreshold są ignorowane? Co kontroluje Tier3CompileThreshold po uruchomieniu kompilacji klienta? Co kontroluje Tier4CompileThreshold po uruchomieniu kompilacji serwera?

Odpowiedz

18

Komentarze w advancedThresholdPolicy.hpp omawiają różne poziomy kompilatorów i progi. Zobacz ten plik, aby uzyskać głębszą dyskusję.

System obsługuje 5 poziomów wykonania:

  • Poziom 0 - interpretera
  • Poziom 1 - C1 z pełną optymalizacją (bez profilowania)
  • Warstwa 2 - C1 o wywołania i backedge liczników
  • Poziom 3 - C1 o pełnej profilowania (poziom 2 + MDO)
  • poziomu 4 - C 2

C1 jest kompilatorem klienta. C2 jest kompilatorem serwera.

W typowym przypadku kompilacja: 0 → 3 → 4. Przypadki nietypowe są używane w oparciu o długości kolejki C1 i C2. Poziom 2 jest używany, gdy długość kolejki C2 jest zbyt długa, aby metoda mogła zostać wykonana o około 30% szybciej, aż C2 może przetworzyć informacje profilowania. Jeśli metoda zostanie określona jako trywialna, wówczas zostanie skompilowana z poziomem 1, ponieważ wygeneruje taki sam kod, jak poziom 4.

Progi są dynamicznie dostosowywane na podstawie długości kolejek C1 i C2.

Powiązane problemy