HotSpot (maszyna wirtualna) - HotSpot (virtual machine)

Wirtualna maszyna Java HotSpot
Pierwotny autor (autorzy) Mikrosystemy słoneczne
Deweloper(zy) Korporacja Oracle
Pierwsze wydanie 27 kwietnia 1999 ; 22 lata temu ( 1999-04-27 )
Wersja stabilna
23.25-b01 / 1 stycznia 2016 ; 5 lat temu ( 01.01.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 .java .net /groups /hotspot

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:

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ż

Bibliografia

Zewnętrzne linki