Programování

Co je JVM? Představujeme virtuální stroj Java

Java Virtual Machine je program, jehož účelem je spouštět jiné programy. Je to jednoduchý nápad, který stojí také jako jeden z našich největších příkladů kódování kung-fu. Společnost JVM na svou dobu narušila současný stav a pokračuje v podpoře programových inovací dodnes.

K čemu se JVM používá

JVM má dvě primární funkce: umožnit běh programů Java na jakémkoli zařízení nebo operačním systému (známý jako princip „Psát jednou, spustit kdekoli“) a spravovat a optimalizovat programovou paměť. Když byla v roce 1995 vydána Java, byly všechny počítačové programy zapsány do konkrétního operačního systému a paměť programu byla spravována vývojářem softwaru. Takže JVM bylo zjevení.

JavaWorld /

Mít technickou definici pro JVM je užitečné a existuje také každodenní způsob, jak o tom vývojáři softwaru přemýšlejí. Pojďme je rozdělit:

  • Technická definice: JVM je specifikace softwarového programu, který provádí kód a poskytuje běhové prostředí pro tento kód.
  • Každodenní definice: JVM je způsob, jakým provozujeme naše programy Java. Nakonfigurujeme nastavení JVM a poté se na něj spoléháme při správě prostředků programu během provádění.

Když vývojáři hovoří o JVM, máme obvykle na mysli proces běžící na stroji, zejména na serveru, který představuje a řídí využití prostředků pro aplikaci Java. Porovnejte to s Specifikace JVM, který popisuje požadavky na sestavení programu, který tyto úkoly provádí.

Kdo vyvíjí a udržuje JVM?

JVM je široce nasazen, hojně používán a udržován některými velmi bystrými programátory, jak firemními, tak otevřenými. Projekt OpenJDK je potomkem rozhodnutí Sun Microsystems o open-source prostředí Java. OpenJDK pokračovala prostřednictvím správy Oracle nad Javou, přičemž většinu těžkých úkolů v dnešní době provádějí inženýři Oracle.

Správa paměti v JVM

Nejběžnější interakcí se spuštěným JVM je kontrola využití paměti v haldě a zásobníku. Nejběžnější úpravou je vyladění nastavení paměti JVM.

Sběr odpadu

Před Javou byla veškerá programová paměť spravována programátorem. V Javě spravuje programovou paměť JVM. JVM spravuje paměť prostřednictvím procesu zvaného odvoz odpadu, který neustále identifikuje a eliminuje nevyužitou paměť v programech Java. Sběr odpadu se děje uvnitř běžícího JVM.

V počátcích se Java hodně kritizovala za to, že nebyla tak „blízká kovu“ jako C ++, a proto nebyla tak rychlá. Proces sběru odpadu byl obzvláště kontroverzní. Od té doby byla pro sběr odpadu navržena a použita celá řada algoritmů a přístupů. Díky důslednému vývoji a optimalizaci se nesmírně zlepšil sběr odpadků.

Co znamená „blízký kovu“?

Když programátoři řeknou, že programovací jazyk nebo platforma jsou „blízké kovu“, máme na mysli, že vývojář je schopen programově (pomocí psaní kódu) spravovat paměť operačního systému. Teoreticky mohou programátoři vyždímat z našich programů vyšší výkon tím, že stanoví, kolik se použije a kdy jej zlikvidovat. Ve většině případů delegování správy paměti na vysoce rafinovaný proces, jako je JVM, přináší lepší výkon a méně chyb, než když to uděláte sami.

JVM se skládá ze tří částí

Dalo by se říci, že JVM má tři aspekty: specifikace, implementace a instance. Uvažujme o každém z nich.

1. Specifikace JVM

Za prvé, JVM je softwarová specifikace. Poněkud kruhovým způsobem specifikace JVM zdůrazňuje, že jsou podrobnosti implementace ne definováno ve specifikaci, aby byla zajištěna maximální kreativita při její realizaci:

"Pro správnou implementaci virtuálního stroje Java potřebujete pouze čtení třída formát souboru a správně provádět operace v něm uvedené. "

J.S. Bach jednou popsal vytváření hudby podobně:

„Jediné, co musíš udělat, je dotknout se správné klávesy ve správný čas.“

Jediné, co JVM musí udělat, je správně spustit programy Java. Zní to jednoduše, může to vypadat jednoduše zvenčí, ale je to obrovský úkol, zejména s ohledem na sílu a flexibilitu jazyka Java.

JVM jako virtuální stroj

JVM je virtuální stroj který přenáší soubory třídy Java přenosným způsobem. Být virtuálním strojem znamená, že JVM je abstrakcí základního skutečného stroje - například serveru, na kterém běží váš program. Bez ohledu na to, jaký operační systém nebo hardware je ve skutečnosti k dispozici, vytváří JVM předvídatelné prostředí pro spouštění programů. Na rozdíl od skutečného virtuálního stroje však JVM nevytváří virtuální operační systém. Bylo by přesnější popsat JVM jako a spravované běhové prostředínebo zpracovat virtuální stroj.

2. Implementace JVM

Výsledkem implementace specifikace JVM je skutečný softwarový program, kterým je implementace JVM. Ve skutečnosti existuje mnoho implementací JVM, a to jak open source, tak proprietárních. HotSpot JVM OpenJDK je referenční implementací a zůstává jednou z nejdůkladněji vyzkoušených a ověřených databází kódu na světě. HotSpot je také nejčastěji používaným JVM.

Téměř všechny licencované JVM jsou vytvořeny jako vidlice z OpenJDK a HotSpot JVM, včetně licencovaných JDK společnosti Oracle. Vývojáři, kteří vytvářejí licencovanou vidlici mimo OpenJDK, jsou často motivováni touhou přidat vylepšení výkonu specifická pro OS. Typicky si JVM stáhnete a nainstalujete jako zabalenou součást prostředí Java Runtime Environment (JRE).

3. Instance JVM

Poté, co bude specifikace JVM implementována a vydána jako softwarový produkt, můžete si ji stáhnout a spustit jako program. Tento stažený program je instancí (nebo instancovanou verzí) JVM.

Většinu času, když vývojáři hovoří o „JVM“, máme na mysli instanci JVM spuštěnou ve vývojovém nebo produkčním prostředí softwaru. Můžete říci: „Hej, Anande, kolik paměti používá JVM na tomto serveru?“ nebo: „Nemůžu uvěřit, že jsem vytvořil kruhový hovor a chyba přetečení zásobníku narazila na můj JVM. Jaká nováček chyba!“

Co je to softwarová specifikace?

A specifikace softwaru (nebo spec) je dokument čitelný pro člověka, který popisuje, jak by měl softwarový systém fungovat. Účelem specifikace je vytvořit jasný popis a požadavky, které mají inženýři kódovat.

Načítání a spouštění souborů tříd v JVM

Mluvili jsme o roli JVM při spouštění aplikací Java, ale jak plní svoji funkci? Aby bylo možné spouštět aplikace Java, závisí JVM na zavaděči tříd Java a na spouštěcím stroji Java.

Zavaděč tříd Java v JVM

Všechno v Javě je třída a všechny aplikace Java jsou vytvářeny z tříd. Aplikace se může skládat z jedné třídy nebo tisíců. Aby bylo možné spustit aplikaci Java, musí JVM načíst zkompilované soubory .class do kontextu, jako je server, kde k nim lze přistupovat. Při provádění této funkce závisí JVM na svém třídním zavaděči.

Zavaděč tříd Java je součástí JVM, která načítá třídy do paměti a zpřístupňuje je k provedení. Zavaděče tříd používají techniky, jako je líné načítání a ukládání do mezipaměti, aby bylo načítání tříd co nejefektivnější. To znamená, že načítání tříd není epickým hlavolamem, který (řekněme) je přenosná runtime správa paměti, takže techniky jsou poměrně jednoduché.

Každý virtuální stroj Java obsahuje zavaděč tříd. Specifikace JVM popisuje standardní metody pro dotazování a manipulaci s zavaděčem tříd za běhu, ale implementace JVM jsou odpovědné za splnění těchto schopností. Z pohledu vývojáře jsou základní mechanismy zavaděče tříd typicky černá skříňka.

Prováděcí stroj v JVM

Jakmile zavaděč tříd dokončí práci s načítáním tříd, JVM začne vykonávat kód v každé třídě. The provedení motoru je komponenta JVM, která tuto funkci zpracovává. Spouštěcí modul je pro běžící JVM nezbytný. Ve skutečnosti je to z praktických důvodů instance JVM.

Spuštění kódu zahrnuje správu přístupu k systémovým prostředkům. Spouštěcí modul JVM stojí mezi spuštěným programem - s jeho požadavky na souborové, síťové a paměťové prostředky - a operačním systémem, který tyto zdroje dodává.

Jak prováděcí modul spravuje systémové prostředky

Systémové prostředky lze rozdělit do dvou širokých kategorií: paměť a všechno ostatní.

Připomeňme, že JVM je zodpovědný za likvidaci nevyužité paměti a že odvoz odpadu je mechanismus, který tuto likvidaci provádí. JVM je rovněž odpovědný za přidělování a udržování referenční struktura které vývojář považuje za samozřejmost. Jako příklad odpovídá prováděcí stroj JVM za převzetí něčeho podobného Nový klíčové slovo v Javě a přeměnit jej na specifický požadavek OS na alokaci paměti.

Kromě paměti vykonávací modul spravuje prostředky pro přístup k souborovému systému a síťové I / O. Vzhledem k tomu, že JVM je interoperabilní napříč operačními systémy, není to žádný průměrný úkol. Kromě potřeb prostředků každé aplikace musí být spouštěcí modul citlivý na každé prostředí OS. Takto je JVM schopen zvládnout divoké požadavky.

Evoluce JVM: Minulost, přítomnost, budoucnost

V roce 1995 představil JVM dva revoluční koncepty, které se od té doby staly standardním tarifem pro moderní vývoj softwaru: „Write once, run anywhere“ (Automatický zápis, spuštění kdekoli) a automatická správa paměti. Softwarová interoperabilita byla v té době odvážným konceptem, ale jen málo vývojářů si to dnes rozmyslí. Podobně, zatímco naši techničtí předchůdci museli sami spravovat programovou paměť, moje generace vyrostla se sběrem odpadků.

Dalo by se říci, že James Gosling a Brendan Eich vynalezli moderní programování, ale tisíce dalších v následujících desetiletích zdokonalily a stavěly na svých nápadech. Zatímco virtuální stroj Java byl původně jen pro Javu, dnes se vyvinul tak, aby podporoval mnoho skriptovacích a programovacích jazyků, včetně Scala, Groovy a Kotlin. Při pohledu do budoucna je těžké vidět budoucnost, kde JVM není významnou součástí rozvojové krajiny.

Vše o JVM

  • Vyzyvatelé Java: Chování vláken v JVM
  • Vyzyvatelé Java: Přetížení metody v JVM
  • Uvnitř optimalizace výkonu JVM
  • Základy Bytecode: Jak JVM zpracovává bytecode
  • Výjimky Java: Jak JVM zpracovává výjimky
  • Představujeme štíhlý, průměrný virtuální stroj Java

Tento příběh „Co je JVM? Představujeme virtuální stroj Java“ původně publikoval JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found