Różnica między JVM a HotSpot?

147

Czym dokładnie jest HotSpot i jaki ma związek z JVM i OpenJDK? Czy to biblioteka? Co to właściwie robi?

Jaka jest różnica między OpenJDK a HotSpot?

Justin
źródło

Odpowiedzi:

148

Definicja tego, czym dokładnie jest wirtualna maszyna języka Java, jest podana w specyfikacji wirtualnej maszyny języka Java

JVM jest z definicji maszyną wirtualną , tj. Maszyną programową, która symuluje działanie prawdziwej maszyny. Podobnie jak prawdziwa maszyna ma zestaw instrukcji , architekturę komputera wirtualnego i model wykonania. Jest w stanie uruchomić kod napisany za pomocą tego wirtualnego zestawu instrukcji, podobnie jak prawdziwa maszyna może uruchomić kod maszynowy.

HotSpot to implementacja koncepcji JVM. Został pierwotnie opracowany przez firmę Sun, a obecnie jest własnością firmy Oracle. Istnieją inne implementacje specyfikacji JVM, takie jak JRockit , IBM J9 i wiele innych.

Zobacz listę implementacji wirtualnych maszyn języka Java

OpenJDK to projekt, w ramach którego implementacja opensource HotSpot'a (i wiele innych kawałków JDK np kompilator, API, narzędzia, etc) jest rozwijany.

Edwin Dalorzo
źródło
25

OpenJDK (Open Java Development Kit) to bezpłatna i otwarta implementacja platformy Java, Standard Edition (Java SE) .Openjdk to projekt rozpoczęty przez Sun Microsystems, obecnie pod opieką wielu firm i społeczności w celu zbudowania Java Development Kit absolutnie w open source. Zgodnie z oficjalną dokumentacją .

OpenJDK to implementacja Open Source specyfikacji Java Platform, Standard Edition (Java SE). W maju 2007 r. Firma Sun wydała w pełni kompilowalną wersję Java Development Kit (JDK) dla Java SE dla społeczności OpenJDK jako wolne oprogramowanie na licencji GNU General Public License w wersji drugiej (GPLv2). Firma Sun ogłosiła powołanie Tymczasowej Rady Zarządzającej dla społeczności OpenJDK. Firma Sun ogłosiła również, że implementacje oparte na OpenJDK mogą wykorzystywać zestaw Java SE 6 Technical Compatibility Kit (JCK) w celu ustalenia zgodności ze specyfikacją Java SE 6.

Projekt OpenJDK składa się z wielu komponentów - HotSpot (maszyny wirtualnej) , biblioteki klas Java i kompilatora javac Java, więcej na ten temat można znaleźć na jego stronie .

Obecna maszyna JVM dostarczana przez Sun / Oracle nosi nazwę HotSpot, ponieważ szuka w kodzie miejsc, w których kod jest używany intensywniej (miejsca, w których kod jest intensywniej używany) w celu optymalizacji „just in time”. Z Wikipedii , HotSpot, wydany jako „Java HotSpot Performance Engine” to wirtualna maszyna Java dla komputerów stacjonarnych i serwerów, utrzymywana i dystrybuowana przez Oracle Corporation.

GŁUPEK
źródło
Słyszałem, że OpenJDK również używa HotSpot do wykonywania kodu? Czy to prawda?
Justin
@TheNewIdiot, więc mówisz, że HotSpot jest częścią OpenJDK? A może istnieje również zastrzeżony HotSpot, jak sugeruje powyższa odpowiedź?
Pacerier,
@NINC, więc Hotspot jest zarówno częścią OracleJDK, jak i OpenJDK? Hotspot = JRockit = OracleJDK = OpenJDK?
Pacerier,
12

Uwaga: AdoptOpenJDK zmienił nazwę na Adoptium po przeniesieniu się do Eclipse Foundation pod koniec 2020-06.


Różnica między JVM a HotSpot?

Java Virtual Machine (JVM) jest wyimaginowany komputer, który nigdy nie został zbudowany fizycznie jako sprzęt. Maszyna JVM uruchamia programy skompilowane do jej wyimaginowanego zestawu instrukcji zapisanych w pamięci jako reprezentacja pośrednia znana jako kod bajtowy .

W czasie wykonywania kod bajtowy musi zostać przetłumaczony z wyimaginowanego zestawu instrukcji na rzeczywisty zestaw instrukcji procesora maszyny hosta. Może to zrobić na bieżąco tłumacz. Albo kod bajtowy może być w pełni skompilowany i zbuforowany, aby działał szybciej niż przez interpreter, w procesie znanym jako kompilacja Just-In-Time (JIT) .

Przez dziesięciolecia było wiele wdrożeń JVM . Większość odpadła.

HotSpot to implementacja technologii JIT, która rozpoczyna się od uruchomienia zinterpretowanego i obserwuje rzeczywistą wydajność aplikacji. Części aplikacji są następnie wybierane do pełnej kompilacji jako kodu natywnego i buforowania, co zapewnia znacznie szybsze wykonanie. HotSpot został opracowany w firmie Sun jako produkt komercyjny. Po przejęciu firmy Sun, Oracle dalej rozwijał HotSpot, łącząc ważne części konkurencyjnego produktu, JRockit . HotSpot jest teraz udostępniany na zasadach open source w ramachprojektu OpenJDK , dostępny bezpłatnie.

Kolejna taka implementacja w OpenJ9 , opracowana przez IBM, a teraz dostępna na zasadach open source za pośrednictwem Eclipse Foundation i dostępna bezpłatnie. Niektóre dystrybucje JVM zbudowane na OpenJDK zastępują HotSpot OpenJ9, podczas gdy reszta OpenJDK jest nadal używana, na przykład biblioteki klas Java SE . Na przykład gotowe dystrybucje dostępne w AdoptOpenJDK zapewniają wybór HotSpot lub OpenJ9 na niektórych urządzeniach.

Diagram przedstawiający historię łączenia HotSpot i JRockit oraz OpenJ9 dostępne w AdoptOpenJDK.

Diagram przedstawiający historię łączenia HotSpot i JRockit oraz OpenJ9 dostępne w AdoptOpenJDK

Czym dokładnie jest HotSpot i jaki ma związek z JVM i OpenJDK? Czy to biblioteka? Co to właściwie robi?

  • HotSpot to implementacja części JVM, która interpretuje i / lub kompiluje kod bajtowy Java do wykonania na procesorze hosta.
  • OpenJ9 jest alternatywą.

OpenJ9 jest ogólnie znany ze znacznie szybszego uruchamiania i znacznie mniejszego zużycia pamięci na początku, podczas gdy HotSpot może ogólnie działać wydajniej w przypadku długotrwałych aplikacji. Oba są dobrze oceniane, dobrze zużyte i dostępne w dystrybucjach OpenJDK.

OpenJDK to projekt typu open source, który w pełni implementuje specyfikacje Java , JSR i JEP, które definiują platformę Java . Każda implementacja JVM, którą znam dzisiaj, jest oparta całkowicie lub w większości na bazie kodu OpenJDKi wykorzystuje technologię HotSpot lub OpenJ9.

Oprócz JVM, OpenJDK zapewnia również implementację w kodzie źródłowym dla wszystkich klas wymaganych przez specyfikacje Java SE, takich jak java.lang , java.util , java.time i inne pakiety.

Jaka jest różnica między OpenJDK a HotSpot?

Kod źródłowy HotSpot jest przechowywany, utrzymywany i dalej rozwijany w ramach projektu OpenJDK . Alternatywa, OpenJ9 , jest przechowywana, utrzymywana i dalej rozwijana w Eclipse Foundation , zastępując HotSpot w niektórych dystrybucjach OpenJDK.

Niektóre dystrybucje technologii Java są dostarczane z HotSpot. Niektóre dystrybucje zastępują część bazy kodu OpenJDK, którą jest HotSpot, alternatywą, OpenJ9 .

Oto schemat blokowy ułatwiający wybór dostawcy dystrybucji platformy Java.

Schemat blokowy ułatwiający wybór dostawcy implementacji Java 11

Motywacje przy wyborze dostawcy oprogramowania Java

Basil Bourque
źródło
8

HotSpot jest, jak wspomniano powyżej, wieloplatformową implementacją koncepcji wirtualnej maszyny języka Java (JVM) i jest rozprowadzany wraz z pakietem OpenJDK (Java Developer Kit) na podstawie Powszechnej Licencji Publicznej GNU. HotSpot jest napisany głównie w C ++ i został pierwotnie opracowany pod Sun Microsystems. Obecnie jest rozwijany w ramach projektu OpenJDK pod adresem www.java.net. HotSpot JVM była dostępna jako dodatek do języka Java 1.2, a później była używana jako domyślna maszyna JVM firmy Sun w języku Java 1.3. Maszyna JVM jest obecnie w wersji 7, kompilacja b147 i ma za sobą aktywną społeczność programistów.

Aby uzyskać więcej informacji, przejdź do: https://www.java.net/

Miłego kodowania!


źródło
7

JVM to abstrakcyjna maszyna (specyfikacje). HotSpot, OpenJDK i JRockit, podobnie jak implementacje JVM.

Bezpłatne i otwarte implementacje

  • HotSpot , główna referencyjna implementacja maszyny wirtualnej Java

  • OpenJDK - Open Java Development Kit jest bezpłatną i otwartą implementacją na licencji GNU General Public License (GNU GPL) z wyjątkiem dotyczącym łączenia.

Autorskie wdrożenia

  • JRockit (pochodzący z Appeal Virtual Machines) nabyty przez Oracle dla systemów Linux, Windows i Solaris

więcej implementacji
link wyjaśnia różnice między HotSpot i JRocket

Premraj
źródło
-25

HotSpot to zaawansowana forma hakowania w C ++, aby z niej skorzystać, musisz zbudować przeciwko niej, aby skompilować nawet najprostsze rzeczy. Chyba że stroisz kompilatory i / lub napiszesz je od zera. HotSpot to w zasadzie sposób na konwersję kodu źródłowego do kodu C ++, a następnie kompilację go do kodu natywnego, w ten sposób skompilowano termin jit.

Dawg
źródło