Java Virtual Machine (JVM) je sada počítačových programů a datových struktur, která využívá modul virtuálního stroje ke spuštění dalších počítačových programů a skriptů vytvořených v jazyce Java. Úkolem tohoto modulu je zpracovat pouze tzv. mezikód, který je v Javě označován jako Java bytecode.
Oracle uvedl, že po celém světě existuje více než 5,5 miliard zařízení s JVM.[1]
Java Virtual Machine umí zpracovat mezikód (Java bytecode), který je obvykle vytvořen ze zdrojových kódů programovacího jazyka Java. Mezikód však může být vytvořen i z jiných jazyků než je Java. Příkladem zdrojového kódu, který může být přeložen do Java bytecodu je zdrojový kód jazyka Ada. Virtuální stroj JVM mohou využívat kromě Sun (firma vyvíjející programovací jazyk Java) i jiné společnosti, které se zabývají vývojem programovacích jazyků. JVM je sice zahrnutý v ochranné známce „Java“, ale může být vyvíjen i jinými společnostmi, pokud budou dodrženy podmínky a související smluvní závazky vydané společností Sun.
Java Virtual Machine je důležitý pro práci programů vytvořených v Javě. Díky tomu že je JVM k dispozici na mnoha platformách, je možné aplikaci v Javě vytvořit pouze jednou a spustit na kterékoliv z platforem, pro kterou je vyvinut JVM (např. Windows, Linux). JVM umožňuje automatické zpracování výjimek, díky kterým dokáže určit hlavní příčinu chyby nezávisle na zdrojovém kódu.
JVM je dodáván spolu se sadou standardních knihoven, které jsou nazývány Java API (Application Programming Interface). Application Programing Interface je systém, který umožňuje programu pracovat s funkcemi a třídami knihoven. JVM a API společně tvoří celek, který je poskytován jako Java Runtime Environment (JRE).
Spouštěcí prostředí
Aby mohla být aplikace spuštěna v JVM musí být zkompilována do standardizovaného a přenosného binárního formátu, který je obvykle ve formě .class souborů. Aplikace může být složena z mnoha různých druhů souborů, proto je možné pro snadnější distribuci rozsáhlých aplikací, zabalit více javovských tříd do jednoho souboru typu .jar.
Spustitelné jsou v JVM soubory s příponou .class nebo .jar. JVM je takzvaný interpret umožňující vykonávat zdrojový kód programu přeložený do mezikódu a zprostředkovat tak komunikaci s platformou na které je JVM spuštěn. V pozdějších verzích Javy nebyl mezikód přímo interpretován, ale před prvním svým spuštěním dynamicky zkompilován do strojového kódu daného počítače (tzv. Just-in-time kompilace, JIT). V současnosti se převážně používají technologie zvané HotSpot compiler, které mezikód zpočátku interpretují a na základě statistik získaných z této interpretace později provedou překlad často používaných částí do strojového kódu včetně dalších dynamických optimalizací (jako je např. inlining krátkých metod atp.).
Podpora dalších jazyků
Ačkoliv byl JVM zaměřen hlavně na spouštění programů vytvořených v Javě, nyní je možné v JVM spustit i programy vytvořené v jiných programovacích jazycích, jako např.: