HotSpot (maszyna wirtualna) - HotSpot (virtual machine)
Pierwotny autor (autorzy) | Mikrosystemy słoneczne |
---|---|
Deweloper(zy) | Korporacja Oracle |
Pierwsze wydanie | 27 kwietnia 1999 |
Wersja stabilna | 23.25-b01 / 1 stycznia 2016
|
Napisane w | C++ , montaż |
System operacyjny | Wieloplatformowy |
Rodzaj | Maszyna wirtualna Java |
Licencja | Zastrzeżona (wczesne wersje), Powszechna Licencja Publiczna GNU (aktualna) |
Strona internetowa | openjdk |
HotSpot , wydany jako Java HotSpot Performance Engine , to wirtualna maszyna Java dla komputerów stacjonarnych i serwerowych , obsługiwana i dystrybuowana przez Oracle Corporation . Oferuje lepszą wydajność dzięki takim metodom, jak kompilacja just-in-time i optymalizacja adaptacyjna .
Historia
Java HotSpot Performance Engine został wydany 27 kwietnia 1999 roku i został zbudowany na technologiach z implementacji języka programowania Smalltalk o nazwie Strongtalk , pierwotnie opracowanego przez Longview Technologies, który jest sprzedawany jako Animorphic. Maszyna wirtualna Longview została oparta na maszynie wirtualnej Self , z interpreterem zastępującym szybki i głupi pierwszy kompilator. Kiedy Sun odwołał projekt Self, dwie kluczowe osoby, Urs Hölzle i Lars Bak, opuściły Sun, aby założyć Longview. W 1997 roku firma Sun Microsystems kupiła Animorphic.
Krótko po nabyciu Animorphic firma Sun zdecydowała się napisać nowy kompilator just-in-time (JIT) dla wirtualnej maszyny Java. Ten nowy kompilator dałby początek nazwie HotSpot , wywodzącej się z zachowania oprogramowania: uruchamiając kod bajtowy Java , podobnie jak w przypadku Self VM, HotSpot nieustannie analizuje wydajność programu pod kątem często lub wielokrotnie wykonywanych hot spotów . Są one następnie przeznaczone do optymalizacji , co prowadzi do wysokiej wydajności wykonywania przy minimalnym obciążeniu dla kodu o mniejszym znaczeniu dla wydajności. W jednym z raportów JVM pokonała część kodu C++ lub C w niektórych testach porównawczych.
Początkowo dostępny jako dodatek do Javy 1.2, HotSpot stał się domyślną maszyną Sun JVM w Javie 1.3.
Cechy
JRE (pierwotnie firmy Sun, teraz firmy Oracle) zawiera dwie maszyny wirtualne, jedną zwaną Klientem, a drugą Serwer . Wersja Client jest dostosowana do szybkiego ładowania. Wykorzystuje interpretację. Wersja serwerowa ładuje się wolniej, wkładając więcej wysiłku w tworzenie wysoce zoptymalizowanych kompilacji JIT, aby zapewnić wyższą wydajność. Obie maszyny wirtualne kompilują tylko często uruchamiane metody, używając konfigurowalnego progu liczby wywołań, aby zdecydować, które metody mają zostać skompilowane.
Kompilacja warstwowa, opcja wprowadzona w Javie 7, wykorzystuje jednocześnie kompilatory klienta i serwera, aby zapewnić szybszy czas uruchamiania niż kompilator serwera, ale z podobną lub lepszą wydajnością szczytową. Począwszy od wersji Java 8, kompilacja warstwowa jest domyślną kompilacją dla maszyny wirtualnej serwera.
HotSpot jest napisany w C++ . W 2007 roku Sun oszacował, że zawiera on około 250 000 linii kodu źródłowego. Hotspot zapewnia:
- Java ClassLoader
- Java bytecode interpreter
- Maszyny wirtualne klienta i serwera , zoptymalizowane pod kątem odpowiednich zastosowań
- Kilka garbage collectorów (w tym ZGC o bardzo krótkim czasie pauzy)
- Zestaw pomocniczych bibliotek uruchomieniowych
Flagi JVM
HotSpot obsługuje wiele argumentów wiersza poleceń dla opcji wykonania maszyny wirtualnej. Niektóre są standardowe i muszą być znalezione w każdej zgodnej wirtualnej maszynie Java ; inne są specyficzne dla HotSpot i nie można ich znaleźć w innych maszynach JVM (opcje zaczynające się od -X lub -XX są niestandardowe).
Licencja
13 listopada 2006 HotSpot JVM i Java Development Kit (JDK) zostały objęte licencją GNU General Public License (GPL) w wersji 2. Jest to kod, który stał się częścią Java 7 .
Obsługiwane platformy
Utrzymywany przez Oracle
Podobnie jak w przypadku całego zestawu Java Development Kit (JDK), HotSpot jest obsługiwany przez firmę Oracle Corporation w systemach Windows , Linux , macOS i Solaris . Obsługiwane architektury zestawów instrukcji (ISA) to IA-32 , x86-64 , ARMv7 VFP, ARMv8 i SPARC (tylko Solaris).
Porty przez osoby trzecie
Porty są również udostępniane przez strony trzecie dla różnych innych systemów operacyjnych Unix . Obsługiwanych jest kilka różnych architektur sprzętowych, w tym x86, PowerPC i SPARC (tylko Solaris).
Przenoszenie HotSpot jest trudne, ponieważ kod, chociaż w większości napisany w C++ , zawiera dużo języka asemblera . Aby temu zaradzić, projekt IcedTea opracował ogólny port interpretera HotSpot o nazwie zero-assembler Hotspot (lub zero ), prawie bez kodu asemblera. Ten port jest przeznaczony do łatwej adaptacji składnika interpretera HotSpot do dowolnej architektury procesora Linux . Kod Hotspota zerowego asemblera jest używany dla wszystkich portów HotSpot o architekturze innej niż x86 ( PowerPC , Itanium ( IA-64 ), S390 i ARM ) od wersji 1.6.
Zobacz też
- Lista wirtualnych maszyn Java
- Porównanie maszyn wirtualnych Java
- Wydajność Javy
- OpenJDK
- Da Vinci Machine , projekt prototypowania rozszerzenia JVM w celu dodania obsługi dynamicznych języków programowania
Bibliografia
Zewnętrzne linki
- Oficjalna strona internetowa
- Lista HotSpot VMOptions
- Specyfikacja wirtualnej maszyny Java
- Historia oryginalnego zespołu Strongtalk-HotSpot
- „Sun ogłasza dostępność mechanizmu Java Hotspot Performance Engine” . Zarchiwizowane z oryginału 18 grudnia 2006 . Pobrano 27 marca 2014 .CS1 maint: bot: nieznany status oryginalnego adresu URL ( link )
- Repozytorium rozwoju kodu źródłowego HotSpot Mercurial (system kontroli wersji) dla JDK8