close

Virtuální stroj Java

Přejít na navigaci Přejít na hledání

V informatice je virtuální stroj Java (také nazývaný Java Virtual Machine nebo JVM ) softwarová součást platformy Java, která spouští programy přeložené do bajtkódu po první fázi kompilace v bajtkódu (mezi programovacími jazyky , které lze přeložit do bytecode najdeme Java , Groovy , Clojure , Scala a Eta ).

Princip

Pro spuštění programu napsaného v jazyce Java je nutné provést následující kroky:

  1. Programátor používá textový editor nebo integrované vývojové prostředí , jako je Eclipse, NetBeans nebo IntelliJ IDEA k napsání jedné nebo více tříd Java.
  2. Software kompilátoru transformuje program do bajtkódu, což je mírná abstrakce strojového kódu
  3. Bytový kód je poskytnut virtuálnímu stroji Java, na kterém je spuštěn

Bytecode se obecně vyrábí kompilací zdrojových kódů (nebo zdrojových souborů ) napsaných v Javě , i když je možné vytvořit bytecode počínaje jinými jazyky, jako je Scala , Kotlin , Clojure nebo Groovy [1] .

JVM je definováno specifikací spravovanou společností Oracle . Jakýkoli systém, který se chová způsobem konzistentním s touto specifikací, je považován za konkrétní implementaci JVM. Existují softwarové implementace pro prakticky všechny moderní operační systémy, svobodné i komerční. Kromě toho existují speciální implementace pro konkrétní hardwarová / softwarová prostředí , jako jsou mobilní telefony a PDA , a dokonce i hardwarové implementace, jako je Jazelle .

Dostupnost implementací Java virtuálních strojů pro různá operační prostředí je klíčem k přenositelnosti Javy , hlásané ve sloganu napiš jednou, spusť všude . Virtuální stroj ve skutečnosti vytváří homogenní exekuční prostředí, které před Java softwarem (a tedy i před programátorem) skrývá jakákoli specifika základního operačního systému :

Aplikační software Java
Java virtuální stroj
Operační systém

Implementace

OpenJDK a HotSpot

Kromě zpracování specifikací virtuálního stroje Java poskytuje Oracle implementaci nazvanou HotSpot, která je zdarma a částečně open source. Nedistribuovatelná část se týká písem, zvuku, zabezpečení a šifrování [2] [3] ; Implementace Oracle jsou obvykle považovány za referenční implementace , ale jsou také široce používány koncovými uživateli, podniky a institucemi.

IcedTea and Zero

K nahrazení částí HotSpot, které byly pod neotevřenou licencí, se zrodil projekt IcedTea. [4] Virtuální stroj vyvinutý v tomto projektu se nazývá HotSpot Zero Assembly, také jednoduše Zero. [5] Projekt si také klade za cíl podporovat více rodin procesorů než virtuální stroj Oracle. Za tímto účelem byl veškerý kód sestavení přítomný v HotSpot přepsán v C++, takže jej lze zkompilovat na více architekturách. [6]

Ostatní implementace

Řada dalších stran pravidelně poskytuje implementace virtuálních strojů Java, obvykle se záměrem konkurovat implementaci Oracle ve výkonu; v některých případech se jedná o komerční implementace. K dispozici jsou také další open source implementace ; z nejznámějších můžeme zmínit Waba [7] . Specifikace JVM diktuje a aktualizuje Oracle jako iniciátor a správce projektu, ale často je ignoruje mnoho implementací JVM jiných než Oracle , které existují, zejména pokud jde o rámec , který každé JVM obsahuje. V důsledku toho nejsou různé JVM vzájemně zcela kompatibilní a při psaní programů je třeba věnovat pozornost, pokud chcete, aby fungovaly na každém JVM. Nejlepší by bylo nepoužívat nejnovější jazykové funkce zavedené Oracle v nejnovějších JVM a používat "stabilní" API , tedy ta, která jsou přítomna v Oracle JVM v různých verzích.

Kompilace Just-In-Time

První implementace virtuálního stroje Java byly interprety . Toto řešení se však ukázalo jako neefektivní, protože interpretované programy byly stále velmi pomalé. Z tohoto důvodu všechny nedávné implementace virtuálních strojů Java zahrnovaly kompilátor just-in-time ( JIT kompilátor ), tj. interní kompilátor, který při spuštění překládá program bajtového kódu Java do běžného programu strojového jazyka za běhu. hostitelský počítač [8] . Tato rekompilace je navíc dynamická, to znamená, že virtuální stroj neustále analyzuje model provádění kódu ( profylaktický ) a dále optimalizuje nejčastěji spouštěné části za běhu programu.

Tato opatření vám za cenu malého čekání během spouštěcí fáze programu umožňují mít mnohem rychlejší a lehčí Java aplikace. I tímto způsobem však Java zůstává méně efektivním jazykem než správně zkompilované jazyky, jako je C++ , s ohledem na skutečnost, že má další vrstvy abstrakce a implementuje řadu automatizmů, jako je garbage collector , které na jedné straně šetří peníze, čas a chyby ve fázi vývoje programů, na druhé straně spotřebovávají paměť a čas CPU ve fázi provádění hotového programu.

Poznámky

  1. ^ Simon Maple, on Adventure Developer's Guide to JVM Languages , na zeroturnaround.com . Staženo 30. května 2015 .
  2. ^ OpenJDK
  3. ^ Oracle America vs Google , Federální odvolací soud, 9. května 2014
  4. ^ Projekt IcedTea archivován 6. října 2014 v internetovém archivu .
  5. ^ Zero a Shark FAQ
  6. ^ Zero and Shark: Zero- Assembly Port OpenJDK .
  7. ^ Waba
  8. ^ Haase, C., Consumer JRE: Leaner, Meaner Java Technology , Sun Microsystem, 2007. Staženo 30. května 2015 .

Bibliografie [1]

Související položky

  1. ^ Ensemble Modo Antiquo., Hudba křižáků. , Amadeus DARP, 2000. Staženo 22. září 2022 .