HotSpot
HotSpot je jednou z implementací Java Virtual Machine (JVM) pro desktopové počítače a servery. Původně byl označen jako Java HotSpot Performance Engine[1] a v současnosti je vyvíjen a udržován firmou Oracle. HotSpot je především velmi efektivní běhové prostředí pro programovací jazyky kompilovatelné do bajtkódu. HotSpot byl zpočátku vyvíjen jako alternativa ke standardní Java Virtual Machine, obsahující Just-in-time (JIT) kompilátor, který nebyl dostatečně efektivní.
Jméno HotSpot vzniklo z anglického "hot" (horký) a "spot" (místo), což je princip, na kterém HotSpot funguje - vyhledávání horkých a často spouštěných metod v programu.
Historie
Java HotSpot Performance Engine byl poprvé zveřejněn 27. dubna 1999[1].
Nejprve byl HotSpot dostupný pouze jako plugin ve verzi 1.2[2], standardní implementací Sun JVM se stává od verze 1.3.
Princip
HotSpot jako svoji součást obsahuje známý Just-in-time (JIT) kompilátor. Před prvním spuštěním je program (zkompilovaný v bajtkódu) přeložen rychlým Just-in-time (JIT) kompilátorem a spuštěn. Z většiny výzkumů vyplývá, že 80% strojového času zabírá pouze 20% kódu, proto by se hodilo tento kód co nejvíce optimalizovat[3] .
Z analýzy běhu programu JVM zjišťuje tzv. horká místa (anglicky hot spots), tedy metody, které jsou spouštěné opakovaně a velmi často. Tyto metody kompiluje tedy znovu s vyšší mírou optimalizace. Kód, který je spouštěn pouze jednou (například inicializační bloky tříd nebo některé konstruktory) by sice mohl běžet rychleji, ale to by znamenalo vyšší míru optimalizace a tedy pomalejší a důkladnější běh Just-in-time (JIT) kompilátoru a ve výsledku by takový program běžel pomaleji.
Díky tomu, že Java Virtual Machine (JVM) beží vždy na konkrétním procesoru, může JVM využívat konkrétní instrukce, a není výjimkou, že dosahuje kratšího strojového času než tradiční jazyky C nebo C++.
Vlastnosti
Na zdrojovém kódu HotSpot JVM doposud pracovaly desítky lidí více než 15 let. (To je zároveň dobře a zároveň špatně.) HotSpot je již velkou věcí. Zdrojové kódy obsahují více než 1500 C/C++ hlavičkových a zdrojových souborů, dohromady obsahujících téměř 250.000 řádků kódu[4]. Stejně jako jiné implementace JVM, HotSpot obsahuje:
- Java Classloader
- Interpret bajtkódu
- Dvě běhové implementace server a client a k nim přidružené JIT kompilátory
- Několik garbage collectorů
- Mnoho podpůrných běhových knihoven, např. pro synchronizaci
Server a client
Běhové prostředí JRE nabízí dvě implementace. Jedna se nazývá client, ta druhá server určené pro desktopové počítače v případě prvním, ve druhém případě pro servery. Zatímco client vyžaduje především rychlé spouštění programů, rychlou odpověď po nějaké vstupně/výstupní operaci, server tak rychlý být nemusí. Client více využívá možností přímé interpretace. Server načítá velmi pomalu, ale s vysokou mírou optimalizace, protože předpokládá, že kód bude spouštěn velmi často a tedy by měl běžet velmi rychle.
Dalším rozdílem jsou přidělovaná časová kvanta běhu jednotlivých programů, která se liší přibližně desetinásobně (tedy pokud kód na JVM client běží 150ms, na JVM server může běžet až 1500ms, než je přepnut). Client chce obvykle rychlou odezvu, mnohdy i více programů. Server na druhou stranu musí obsluhovat mnoho požadavků, a tedy nemůže neustále přepínat mezi programy.
JVM přepínače (flags)
Podobně jako jiné implementace JVM obsahuje mnoho tisíc různých přepínačů a možností. Nejdůležitější pro HotSpot jsou pravděpodobně -server a -client, pro nastavení chování HotSpot na různých konfiguracích hardware.
Podporované platformy
Udržované firmou Oracle
Podobně jako pro JDK od Oraclu je implementace HotSpotu vyvíjena a udržována pro Microsoft Windows, Linux, Solaris a Mac OS X. Podporované instrukční sady jsou x86-64, ARMv6, ARMv7 a SPARC (pouze Solaris).
Ostatní
Portování na jiné platformy je samozřejmě díky GPLv2 licenci možné, ale velmi složité. Zdrojový kód je psán v C/C++ a obsahuje velmi vysoké procento jazyka assembleru. Projekt IcedTea se snaží o obecnější variantu HotSpot interpretru nazvanou zero-asembler HotSpot s téměř nulovou dávkou assembleru. Projekt IcedTea je především určen pro širokou škálu Linuxových distribucí.
Licence
Od 13. listopadu 2006 je HotSpot JVM licencován pod GPL verze 2[4]
Související články
Odkazy
Reference
- MAELTIC, Greg. Archivovaná kopie [online]. Paříž: 27.4.1999 [cit. 2015-05-18]. Dostupné v archivu pořízeném dne 2013-11-01.
- SHANKLAND, Stephen. 18.2.1999 [cit. 2015-05-18]. Dostupné online.
- GOUREVITCH, Artiom. 24.10.2011 [cit. 2015-05-18]. Dostupné online.
- Oracle [cit. 2015-05-18]. Dostupné online.