Virtuální stroj Java
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:
- 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.
- Software kompilátoru transformuje program do bajtkódu, což je mírná abstrakce strojového kódu
- 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
- ^ Simon Maple, on Adventure Developer's Guide to JVM Languages , na zeroturnaround.com . Staženo 30. května 2015 .
- ^ OpenJDK
- ^ Oracle America vs Google , Federální odvolací soud, 9. května 2014
- ^ Projekt IcedTea archivován 6. října 2014 v internetovém archivu .
- ^ Zero a Shark FAQ
- ^ Zero and Shark: Zero- Assembly Port OpenJDK .
- ^ Waba
- ^ Haase, C., Consumer JRE: Leaner, Meaner Java Technology , Sun Microsystem, 2007. Staženo 30. května 2015 .
Bibliografie [1]
- ( EN ) Tim Lindholm, Frank Yellin, Gilad Bracha, Alex Buckley, Java Virtual Machine Specification , Java SE 8 Edition, 2014. Staženo 3. října 2014 .
- ( EN ) Seth Sachin, Understanding Java virtual machine , Alpha Science International Ltd, 2013. Získáno 3. října 2014 .
Související položky
- ^ Ensemble Modo Antiquo., Hudba křižáků. , Amadeus DARP, 2000. Staženo 22. září 2022 .