Wirtualna maszyna Javy

Przegląd architektury JVM. Kod programu napisanego np. w Javie lub Pythonie jest kompilowany do postaci kodu bajtowego, który następnie może być wykonany przez maszynę wirtualną na różnych urządzeniach. Maszyna wirtualna jest odpowiedzialna za ukrycie różnic między poszczególnymi platformami tak, że teoretycznie ten sam program można uruchomić w każdym miejscu.

Wirtualna maszyna Javy (ang. Java Virtual Machine, JVM) – maszyna wirtualna oraz środowisko zdolne do wykonywania kodu bajtowego Javy. Według szacunków różnych firm i autorów publikacji, liczba urządzeń wyposażonych w JVM wynosi 10 miliardów, w tym 1 miliard komputerów, a liczba programistów tworzących oprogramowanie na tę platformę – 6,5 do 9 milionów.

Przegląd

Wirtualna maszyna Javy to zestaw aplikacji napisanych na tradycyjne urządzenia i systemy operacyjne. Dostarcza środowiska, w którym może się wykonywać program skompilowany do postaci kodu bajtowego Javy, zapewniając takie usługi, jak odśmiecanie pamięci czy obsługę wyjątków oraz bibliotekę standardową. W zależności od potrzeb i liczby dostępnych narzędzi, wyróżniane są dwie główne dystrybucje:

Wirtualna maszyna Javy nie jest nazwą konkretnego produktu. Dostępna publicznie specyfikacja pozwala różnym producentom oprogramowania na tworzenie własnych maszyn wirtualnych pracujących pod kontrolą różnych środowisk i urządzeń. Firma Oracle Corporation, twórca i właściciel znaku towarowego Java, udostępnia swoją maszynę wirtualną, ale inne firmy także mogą używać go w swoich produktach pod warunkiem, że ściśle przestrzegają oficjalnej specyfikacji i dodatkowych regulacji. Począwszy od Javy 7, wzorcową implementacją JVM jest OpenJDK będąca wolnym oprogramowaniem.

Elementy składowe

W skład maszyny wirtualnej Java wchodzą następujące elementy:

Języki JVM

Implementacje istniejących języków na JVM
JęzykImplementacja JVM
Common LispABCL
ErlangErjang
JavaScriptRhino
PascalFree Pascal
PHPResin
PythonJython
RubyJRuby
TclJacl

Wirtualna maszyna Javy została pierwotnie stworzona do wykonywania programów napisanych w języku Java. Z biegiem czasu pojawiły się jednak kompilatory potrafiące kompilować wiele istniejących języków do postaci kodu bajtowego maszyny wirtualnej. Lista najważniejszych implementacji zawarta jest w tabelce obok. W ostatniej dekadzie powstało także kilka nowych języków zaprojektowanych z myślą o wykonywaniu na JVM:

Choć JVM została zaprojektowana z myślą o językach statycznie typowanych, z powodzeniem udało się zaimplementować na niej również języki typowane dynamicznie poprzez obejście części ograniczeń wprowadzanych przez specyfikację kodu bajtowego. W specyfikacji Java 7 po raz pierwszy pojawiło się wsparcie dla takich języków w postaci instrukcji invokedynamic, która pozwala na natywne wywoływanie metod pozbawionych informacji o typach argumentów.

Maszyny wirtualne

Referencyjną implementacją JVM począwszy od Javy 7 jest OpenJDK, otwarta implementacja powstała w wyniku stopniowego otwierania kodu źródłowego oryginalnej maszyny HotSpot stworzonej przez Sun Microsystems i zastępowania występujących w niej komponentów własnościowych. Zamknięta wersja HotSpot jest w dalszym ciągu rozwijana przez firmę Oracle. Do niezależnych implementacji zaliczają się Kaffe oraz IBM J9.

Zobacz też

Przypisy

  1. ↑ Matt Raible: What's happening in the Java world. java.dzone.com, 2010-03-18. [dostęp 2011-11-12]. (ang.).
  2. ↑ JavaOne 2013 Review: Java Takes on the Internet of Things
  3. ↑ Moving to OpenJDK as the official Java SE 7 Reference Implementation. blogs.oracle.com, 2011-06-09. [dostęp 2011-11-12]. (ang.).
  4. ↑ Joab Jackson: Oracle ships Java 7 RC. javaworld.com, 2011-07-07. [dostęp 2011-11-12]. (ang.).
  5. ↑ John R. Rose: A renaissance VM: One Platform, Many Languages. oracle.com. [dostęp 2011-11-12]. (ang.).
  6. ↑ Sun Opens Java. Sun Microsystems, 2006-11-13. [dostęp 2011-11-12]. (ang.).