close

Maszyna wirtualna Java

Skocz do nawigacji Skocz do wyszukiwania

W informatyce maszyna wirtualna Java (zwana również wirtualną maszyną Java lub JVM ) jest komponentem oprogramowania platformy Java, który wykonuje programy przetłumaczone na kod bajtowy po pierwszej fazie kompilacji w kodzie bajtowym (wśród języków programowania, które można przetłumaczyć na kod bajtowy znajdujemy Java , Groovy , Clojure , Scala i Eta ).

Zasada

Czynności, które należy wykonać, aby uruchomić program napisany w Javie, są następujące:

  1. Programista używa edytora tekstu lub zintegrowanego środowiska programistycznego, takiego jak Eclipse, NetBeans lub IntelliJ IDEA, aby napisać jedną lub więcej klas Java
  2. Oprogramowanie kompilatora przekształca program w kod bajtowy, który jest niewielką abstrakcją kodu maszynowego
  3. Kod bajtowy jest dostarczany do wirtualnej maszyny Java, która go uruchamia

Kod bajtowy jest zazwyczaj tworzony przez kompilację kodów źródłowych (lub plików źródłowych ) napisanych w Javie , chociaż możliwe jest wytworzenie kodu bajtowego zaczynając od innych języków, takich jak Scala , Kotlin , Clojure czy Groovy [1] .

JVM jest zdefiniowana przez specyfikację utrzymywaną przez Oracle . Każdy system, który zachowuje się w sposób zgodny z tą specyfikacją, jest uważany za konkretną implementację JVM. Istnieją implementacje oprogramowania dla praktycznie wszystkich nowoczesnych systemów operacyjnych , zarówno bezpłatnych, jak i komercyjnych. Ponadto istnieją specjalne implementacje dla określonych środowisk sprzętowych / programowych , takich jak telefony komórkowe i PDA ), a nawet implementacje sprzętowe, takie jak Jazelle .

Dostępność implementacji maszyn wirtualnych Java dla różnych środowisk operacyjnych jest kluczem do przenośności Javy , głoszonej w haśle write raz, uruchamianej wszędzie . Maszyna wirtualna w rzeczywistości tworzy jednorodne środowisko wykonawcze, które ukrywa przed oprogramowaniem Javy (a więc przed programistą) wszelką specyfikę systemu operacyjnego :

Oprogramowanie aplikacji Java
Maszyna wirtualna Java
System operacyjny

Implementacje

OpenJDK i HotSpot

Oprócz obsługi specyfikacji maszyn wirtualnych Java, Oracle zapewnia implementację o nazwie HotSpot, która jest bezpłatna i częściowo open source. Część niedystrybucyjna dotyczy czcionek, dźwięku, bezpieczeństwa i szyfrowania [2] [3] ; Implementacje Oracle są zwykle postrzegane jako implementacje referencyjne , ale są również szeroko stosowane przez użytkowników końcowych, firmy i instytucje.

IcedTea i Zero

Aby zastąpić części HotSpota, które były objęte nieotwartą licencją, narodził się projekt IcedTea. [4] Maszyna wirtualna opracowana w ramach tego projektu nazywa się HotSpot Zero Assembly, również po prostu nazywana Zero. [5] Projekt ma również na celu wsparcie większej liczby rodzin procesorów niż maszyna wirtualna Oracle. Aby to zrobić, cały kod asemblera obecny w HotSpot został przepisany w C++, dzięki czemu można go kompilować na wielu architekturach. [6]

Pozostałe implementacje

Wiele innych stron regularnie dostarcza implementacje maszyn wirtualnych Java, zazwyczaj z zamiarem konkurowania wydajnością z implementacją Oracle; w niektórych przypadkach są to wdrożenia komercyjne. Dostępne są również inne implementacje open source ; wśród najbardziej znanych można wymienić Wabę [7] . Specyfikacje JVM są dyktowane i aktualizowane przez Oracle jako inicjatora i opiekuna projektu, ale często są lekceważone przez wiele implementacji JVM innych niż Oracle , które istnieją, zwłaszcza jeśli chodzi o framework , który zawiera każda JVM. W związku z tym różne maszyny JVM nie są ze sobą całkowicie kompatybilne i należy zachować ostrożność podczas pisania programów, jeśli chcesz, aby działały na każdej JVM. W tym celu najlepiej byłoby nie używać najnowszych funkcji językowych wprowadzonych przez Oracle w najnowszych maszynach JVM i korzystać ze „stabilnych” API , to znaczy, które były obecne w Oracle JVM w różnych wersjach.

Kompilacja Just-In-Time

Pierwszymi implementacjami wirtualnej maszyny Javy były interpretery . Rozwiązanie to okazało się jednak nieefektywne, ponieważ interpretowane programy były nadal bardzo powolne. Z tego powodu wszystkie ostatnie implementacje maszyn wirtualnych Java zawierają kompilator just -in-time ( kompilator JIT ), tj. kompilator wewnętrzny, który podczas uruchamiania w locie tłumaczy program kodu bajtowego Java na normalny program w języku maszynowym. [8] . Ponadto ta rekompilacja jest dynamiczna, to znaczy maszyna wirtualna stale analizuje model wykonania kodu ( profilaktycznie ) i dodatkowo optymalizuje najczęściej wykonywane części podczas działania programu.

Środki te, za cenę niewielkiego oczekiwania w fazie uruchamiania programu, pozwalają na posiadanie znacznie szybszych i lżejszych aplikacji Java. Jednak nawet w ten sposób Java pozostaje mniej wydajnym językiem niż poprawnie skompilowane języki takie jak C++ , biorąc pod uwagę fakt posiadania dodatkowych warstw abstrakcji i zaimplementowania szeregu automatyzmów, takich jak garbage collector , które z jednej strony oszczędzają pieniądze, czas i błędy w fazie tworzenia programów, z drugiej zaś zużywają pamięć i czas procesora w fazie wykonania gotowego programu.

Notatki

  1. ^ Simon Maple, przewodnik dla programistów przygód po językach JVM , na stronie zeroturnaround.com . Źródło 30 maja 2015 .
  2. ^ OtwórzJDK
  3. ^ Oracle America kontra Google , Federalny Sąd Apelacyjny, 9 maja 2014 r.
  4. ^ Projekt IcedTea zarchiwizowany 6 października 2014 r. w Internet Archive .
  5. ^ Zero i rekin FAQ
  6. ^ Zero i Shark: Zero- Assembly Port OpenJDK .
  7. ^ Waba
  8. ^ Haase, C. Consumer JRE: Leaner, Meaner Java Technology , Sun Microsystem, 2007 . Źródło 30 maja 2015 .

Bibliografia [1]

Powiązane pozycje

  1. ^ Ensemble Modo Antiquo., Muzyka krzyżowców. , Amadeus DARP, 2000. Źródło 22 września 2022 .