Přejít na hlavní obsah

Jak funguje Java stroj: provozní principy a základní komponenty

Java stroj - toto je hlavní část platformy Java, která Vám umožňuje provádět programy napsané v jazyce Java. Funguje na principu virtuálního stroje, to znamená, že poskytuje abstraktní runtime prostředí pro programy, což umožňuje stejnému programu pracovat na různých operačních systémech bez změn kódu.

Hlavní součásti stroje Java jsou:

  1. Třída-Loader - komponenta, která načítá třídy do Java stroje. Vyhledá a otevře bajtový kód soubory, přečte je a vytvoří třídy v paměti. Třída Loader je zodpovědná za Vyhledávání, stahování a řešení závislostí tříd.
  2. Interpret bajtového kódu - komponenta, která převádí bajtový kód na spustitelný kód srozumitelný stroji. Analyzuje bajtový kód podle pokynů a provádí příslušné operace.
  3. Optimalizátor - komponenta, která optimalizuje spustitelný kód a zlepšuje jeho výkon. Analyzuje bajtový kód programu a aplikuje různé optimalizace, jako je inline zveřejnění, odstranění nedosažitelného kódu atd.
  4. Sběrač odpadků - komponenta, která odstraňuje objekty, které program již nepotřebuje. Sběrač odpadků sleduje využití paměti a automaticky uvolňuje oblasti paměti obsazené objekty, které lze znovu použít.

Díky této architektuře Java poskytuje stroj multiplatformitu a vysoký výkon provádění Java programů. Umožňuje programátorům soustředit se na vývoj aplikací, které nejsou závislé na konkrétním operačním systému.

Co je Java stroj?

Základní princip fungování JVM je, že přijímá bajtový kód (soubory .class), které jsou výsledkem kompilace Java kódu. Bajtový kód je nízkoúrovňová instrukce srozumitelná pouze JVM. Během provádění programu JVM interpretuje bajtový kód tak, že jej převede do sady strojových instrukcí kompatibilních s konkrétním operačním systémem a hardwarovou platformou.

Hlavní součásti JVM jsou:

KomponentPopis
ClassLoaderStáhne třídy během provádění programu a zajistí jejich rozlišení.
MemorySpravuje paměť v JVM, včetně rozdělení paměti na zásobník a hromadu.
Execution EngineInterpretuje bajtový kód a provádí pokyny na základě aktuální platformy.
Garbage CollectorAutomaticky uvolní paměť používanou nepoužívanými objekty.

Java stroj poskytuje multiplatformitu, protože bajtový kód může být spuštěn na jakékoli platformě, kde je nainstalován odpovídající JVM. To je zvláště užitečné pro vývojáře Java, protože mohou vyvíjet aplikace na jedné platformě a provádět je na druhé bez změn původního kódu.

Java stroj je tedy klíčovou součástí, která umožňuje implementovat princip "Write once, run anywhere" (WOFA) - napište kód jednou, spusťte jej všude.

Princip práce

Hlavní myšlenkou práce JVM je, že převádí Java kód na bajtový kód, který je na konkrétní platformě nezávislý na prezentaci programu. Bajtový kód je poté interpretován nebo kompilován do strojového kódu konkrétní platformy.

Jednou z klíčových součástí JVM je Class Loader. Načte bajtový kód a vytvoří třídy A rozhraní Java v paměti. Class Loader je také zodpovědný za vyhledávání a načítání závislostí tříd.

Další důležitou složkou JVM je Bytecode Verifier. Kontroluje bajtový kód, aby splňoval určitá bezpečnostní pravidla, aby se předešlo chybám při provádění a zranitelnostem.

Hlavní funkcí JVM je provedení bajtového kódu. Interpretace je jedním ze způsobů provádění bajtového kódu. V tomto případě JVM střídavě provádí každou instrukci bajtového kódu. Interpretace však může být poměrně pomalá. K urychlení provádění programu může JVM použít kompilaci Just-In-Time (JIT). V tomto případě jsou často používané fragmenty kódu kompilovány do strojového kódu pro efektivnější provádění.

JVM je také zodpovědný za správu paměti v aplikacích Java. Automaticky spravuje výběr a uvolnění paměti pro objekty v Java Heap. JVM používá algoritmus sběru odpadků k identifikaci nepoužívaných objektů a jejich odstranění.

Všechny tyto komponenty spolupracují na zajištění efektivního provádění aplikací Java. JVM umožňuje programátorům psát kód jednou a spouštět jej na různých platformách beze změny.

Bajtový kód a virtuální stroj

Když je zdrojový kód Java kompilován, převede se na bajtový kód, který je platformově nezávislý. To znamená, že program lze zkompilovat pouze jednou a spustit na jakékoli platformě, na které je JVM nainstalován.

JVM má vlastnost kompilace Just-In-Time (JIT), která zahrnuje převod některých částí bajtového kódu na strojový kód přímo během provádění programu. To umožňuje lepší výkon, protože JIT kompiluje pouze použité části kódu.

JVM je také zodpovědný za správu paměti během provádění programu. Automaticky zvýrazní a uvolní paměť pro objekty pomocí mechanismu sběru odpadků. To osvobodí programátora od nutnosti ručně spravovat paměť a usnadní vývoj aplikací.

Jednou z důležitých funkcí JVM je Kontrola zabezpečení během provádění programu. Často jsou v jazyce Java spuštěny webové aplikace, které mohou být náchylné k různým druhům útoků. JVM poskytuje mechanismy pro kontrolu typů, řízení přístupu a další mechanismy, které pomáhají zajistit, že program bude bezpečně spuštěn.

Díky bajtovému kódu a virtuálnímu počítači lze Java programy spustit na různých platformách. Díky tomu je jazyk Java velmi populární a široce používaný ve světě vývoje softwaru.

Hlavní komponenty

  • Kompilátor: Převádí zdrojový kód v jazyce Java na bajtové kódy, které lze provést na Java stroji.
  • Java Virtual Machine (JVM): Spouští bajtové kódy a řídí provádění programu Java.
  • Class Loader: Načte třídy do paměti JVM.
  • Runtime Data Areas: Jedná se o oblasti paměti JVM používané k ukládání dat během provádění programu, jako jsou metody, proměnné, zásobníky hovorů atd.
  • Execution Engine: Spustíte bajtové kódy a zajistíte spuštění programu Java.

Java stroj začíná načítáním tříd pomocí Class Loader. JVM pak používá Execution Engine k interpretaci a provádění bajtových kódů. Runtime Data Areas se používá ke správě paměti a dat potřebných k provedení programu.

Třída-loaders

Každá třída-Loader je exemplář třídy ClassLoader nebo jeho podtřída. Hierarchie třídy loaderů tvoří strom, kde každá úroveň představuje samostatnou třídu-Loader. Vrchol stromu odpovídá systémové třídě Loader, která je součástí JVM a Stahuje třídy ze standardních knihoven. Další třídy loaderů, nazývané také vlastní nebo vlastní, může vytvořit programátor a stahovat třídy ze souborového systému, sítě nebo jiných zdrojů.

Když je třída nezbytná pro provádění programu, Loader class ji nejprve vyhledá v mezipaměti stažených tříd. Pokud již byla třída načtena dříve, jednoduše se vrátí z mezipaměti. Pokud třída ještě nebyla načtena, Loader class zavolá rodičovskou třídu-Loader v hierarchii, aby se ji pokusil načíst. Pokud rodičovská třída-Loader také nemůže najít třídu, aktuální třída-Loader si ji stáhne sama.

Hierarchie třídních loaderů tak poskytuje mechanismus pro vyhledávání a načítání tříd doprava a nahoru do stromu. Pokud třída Loader nemůže najít a načíst požadovanou třídu, vede to k ClassNotFoundException. Loaders class také provádějí určité kontroly Při načítání tříd, jako je kontrola nezbytných závislostí nebo podpisů.

Třída-LoaderPopis
Bootstrap (bootloader)Stahuje třídy ze standardních knihoven JVM.
Extension (rozšíření)Stahuje třídy z rozšíření Java umístěných v adresáři "ext".
Systém (systém)Stáhne třídy z balíčků aplikace a cest uvedených v proměnné prostředí "classpath".
Custom (Vlastní)Stáhne třídy z vlastních zdrojů, jako je souborový systém nebo síť.

Paměť a sběr odpadků

Java Virtual Machine (JVM) spravuje paměť přidělenou k provádění programu v Javě. Omezené zdroje paměti jsou rozděleny do různých oblastí, jako je hromada (Heap) a zásobník (Stack).

Halda je oblast paměti, ve které se vytvářejí a ukládají objekty a pole. Hromada je řízena automaticky, což znamená, že programátor se nemusí starat o přidělení a uvolnění paměti pod objekty. Celkem JVM rozlišuje dvě oblasti v hromadě: Young Generation (mladá generace) a Old Generation (stará generace).

Mladá generace je oblast paměti, kde se vytvářejí nové objekty. Dělí se na dvě generace: Eden Space a dvě Survivor Spaces. Objekty, které procházejí dalším průchodem sběračů odpadků, se stěhují do staré generace.

Old Generation je oblast paměti, kde jsou uloženy objekty s dlouhou životností. Jak se stará generace plní, JVM provádí sběr odpadků, uvolňuje paměť a přenáší zbývající předměty.

Sběr odpadu je proces automatického uvolnění paměti z objektů, které se již nepoužívají. JVM má speciální mechanismus s názvem "sběrač odpadků", který sleduje objekty a určuje, které z nich mohou být odstraněny.

Skládka odpadu v Javě funguje následovně:

  1. Sběrač odpadků začíná s objekty v mladší generaci. Zkontroluje, které objekty se již nepoužívají, a uvolní paměť, poté přesune zbývající objekty do staré generace.
  2. Sběrač odpadků se pak přesune do staré generace. Uvolňuje paměť z objektů, které se již nepoužívají, a přesouvá zbývající objekty, aby vytvořil volné místo pro nové objekty.
  3. Proces sběru nečistot může být způsoben v případě potřeby, například když je paměť blízko naplnění nebo při explicitním volání metody System.gc().

Je důležité si uvědomit, že skládkování odpadu může být drahá operace, takže programátoři doporučují vytvářet objekty a efektivně používat paměť. Nesprávné použití paměti může vést k úniku paměti nebo snížení výkonu programu.