Wirtualna maszyna Java - poziomy kompilacji
JVM obsługuje pięć poziomów kompilacji -
- Interpreter
- C1 z pełną optymalizacją (bez profilowania)
- C1 z wywołaniem i licznikami tylnymi (profilowanie światła)
- C1 z pełnym profilowaniem
- C2 (wykorzystuje dane do profilowania z poprzednich kroków)
Użyj -Xint, jeśli chcesz wyłączyć wszystkie kompilatory JIT i używać tylko interpretera.
Klient kontra serwer JIT
Użyj -client i -server, aby aktywować odpowiednie tryby.
Kompilator klienta (C1) rozpoczyna kompilację kodu wcześniej niż kompilator serwera (C2). Tak więc, do czasu rozpoczęcia kompilacji C2, C1 już skompilował sekcje kodu.
Ale gdy czeka, C2 profiluje kod, aby wiedzieć o nim bardziej niż C1. W związku z tym czas oczekiwania na przesunięcie przez optymalizacje można wykorzystać do wygenerowania znacznie szybszego pliku binarnego. Z punktu widzenia użytkownika kompromis występuje między czasem uruchomienia programu a czasem potrzebnym do uruchomienia programu. Jeśli czas uruchamiania jest premium, należy użyć C1. Jeśli aplikacja ma działać przez długi czas (typowe dla aplikacji wdrażanych na serwerach), lepiej jest użyć C2, ponieważ generuje znacznie szybszy kod, co znacznie kompensuje dodatkowy czas uruchamiania.
W przypadku programów takich jak IDE (NetBeans, Eclipse) i innych programów z graficznym interfejsem użytkownika czas uruchamiania ma kluczowe znaczenie. Uruchomienie NetBeans może zająć minutę lub dłużej. Setki klas są kompilowane podczas uruchamiania programów takich jak NetBeans. W takich przypadkach najlepszym wyborem jest kompilator C1.
Zwróć uwagę, że istnieją dwie wersje C1 - 32b and 64b. C2 wchodzi tylko64b.
Kompilacja warstwowa
W starszych wersjach Java użytkownik mógł wybrać jedną z następujących opcji -
- Tłumacz (-Xint)
- C1 (-klient)
- C2 (-serwer)
Pojawił się w Javie 7. Używa kompilatora C1 do uruchamiania, a gdy kod staje się gorętszy, przełącza się na C2. Można go aktywować za pomocą następujących opcji JVM: -XX: + TieredCompilation. Wartość domyślna toset to false in Java 7, and to true in Java 8.
Spośród pięciu poziomów kompilacji warstwowe zastosowania kompilacji 1 -> 4 -> 5.