Zpracovali: Vašek Mikolášek a Pavel Herout
Vedoucí projektu, korektury, závěrečná revize: Pavel Herout
Java HotSpot VM (Virtual Machine) je JIT kompilátor Javy. HotSpot je součástí Java 2 Standard Edition od verze 1.3.1.
Základní myšlenka HotSpotu je optimalizovat ty části kódu, které si to zaslouží. Program totiž při svém běhu stráví většinu času voláním jen malé části funkcí -- zhruba 20 % z celkového kódu. Není tedy třeba provádět optimalizaci zbylých 80 %, ale můžeme ušetřený výpočetní čas věnovat výkonnější optimalizaci těch částí, které jsou volány nejčastěji. Samozřejmě ale vyvstává otázka, jak tyto části určit.
HotSpot toto řeší tak, že při spuštění programu neprovádí žádné (nebo jen minimální) optimalizace a potom sleduje program a zaznamenává nejčastěji volané metody (tj. "profiling") a ty následně optimalizuje. Důsledkem toho je, že se programy obecně spouští rychleji (vynechaná optimalizace), ale po nějakou "zkušební dobu" běží o něco pomaleji. HotSpot průběžně optimalizuje potřebné funkce a program je tak průběžně zrychlován. HotSpot takto sleduje program od jeho spuštění až do ukončení.
To, kdy je provedena většina optimalizací, záleží na druhu programu (technické výpočty, GUI, textové editory atd.). Pro více informací o prováděných optimalizacích viz dokumentaci na java.sun.com/products/hotspot
Ve skutečnosti v sobě HotSpot zahrnuje dva různé -- nicméně kompatibilní -- překladače, odlišné svou taktikou optimalizace:
Spuštění aplikace pod HotSpot serverem umožní přepínač -server.
Například:
java -server MujProgramPoznámka:
Po příkazu:
java -server -versionbyste měli dostat výpis.
Zajímavou volbou pro spouštění je (nestandardní a nedokumentovaný ;-) přepínač -Xcomp (kombinovatelný i s -server), který říká
interpreteru, aby celý kód přeložil jednorázově do strojového kódu. Zabrání tak HotSpotu provádět optimalizaci za
běhu, ovšem za cenu, že spouštění trvá déle a samozřejmě program není dobře optimalizován.
Zkuste příkaz:
java -Xcomp -versionVýsledek si můžete prohlédnout zde.
Poznámka:
Pokud se rozhodnete, že budete chtít spouštět vaše programy implicitně pod HotSpot serverem, lze toto podle informací z HotSpot FAQ nastavit
v souboru jvm.cfg, který se nalézá v podadresáři jre\lib v adresáři, kde máte nainstalovanou J2SE.
Na první nezakomentované řádce má být -server.
(Tuto skutečnost se ale nepodařilo ověřit.)
Jak již bylo zmíněno dříve, HotSpot server (zkráceně server) je určen především pro aplikace určené k dlouhodobějšímu běhu, u kterých je žádoucí větší výkon. Oproti tomu client je určen pro aplikace s GUI, od kterých se očekává, že se hlavně rychle spustí, aby se uživatel zbytečně neznervózňoval prodleními při načítání programu.
Těmto tvrzením dobře odpovídají i výsledky provedených testů.
Poznámky: