Java Virtual Machine (JVM) je základným komponentom Java Runtime Environment (JRE), ktorý umožňuje programom Java bežať na akejkoľvek platforme bez úprav. JVM funguje ako tlmočník medzi bajtkódom Java a základným hardvérom, ktorý poskytuje slávnu schopnosť Java Write Once Run Anywhere (WORA).
mapový java iterátor
- Zdroj Java (.java) -> skompilovaný javacom -> bytecode (.class)
- JVM načíta bajtový kód, overí, či ho prepojí a potom ho spustí
- Spustenie môže zahŕňať interpretáciu bajtkódu alebo použitie kompilácie JIT (Just-In-Time) na konverziu horúceho kódu na natívny strojový kód na zvýšenie výkonu
- Na pozadí beží garbage collection, aby sa obnovila pamäť z nepoužívaných objektov
Architektúra JVM
Obrázok nižšie ukazuje architektúru a kľúčové komponenty JVM.
Komponenty architektúry JVM
Teraz budeme podrobne diskutovať o každom komponente JVM.
1. Subsystém Class Loader
Zodpovedá najmä za tri činnosti.
1. Načítavanie
- Číta súbory .class a ukladá metadáta triedy v oblasti metód.
- Vytvorí objekt Class v halde predstavujúci načítanú triedu.
class GFG{ static{ System.out.println('GFG class is loaded by the JVM!'); } public void display(){ System.out.println('Method of GFG class is executed.'); } } public class Test{ public static void main(String[] args) throws Exception{ System.out.println('Main method started.'); // Loading the class explicitly using Class.forName() Class.forName('GFG'); System.out.println('Class loaded successfully.'); // Creating object to execute method GFG obj = new GFG(); obj.display(); } }
Výstup
Main method started. GFG class is loaded by the JVM! Class loaded successfully. Method of GFG class is executed.
Poznámka: Za každé nabité .trieda iba súbor jeden je vytvorený objekt triedy.
2. Prepojenie: Zodpovedný za prípravu načítanej triedy na vykonanie. Zahŕňa tri kroky:
inštalácia baterky
- Overenie: Zabezpečuje, že bajtový kód dodržiava pravidlá JVM a je bezpečné ho spustiť.
- Príprava: Prideľuje pamäť pre statické premenné a priraďuje predvolené hodnoty.
- Rozlíšenie: Prevádza symbolické odkazy na priame odkazy v pamäti.
3. Inicializácia
- Priraďuje skutočné hodnoty statickým premenným.
- Vykonáva statické bloky definované v triede.
Typy nakladačov triedy
- Bootstrap Class Loader: Načíta základné triedy Java (JAVA_HOME/lib).
- Načítač triedy rozšírenia: Načíta triedy z adresára rozšírení (JAVA_HOME/jre/lib/ext).
- Zavádzač triedy systému/aplikácie: Načíta triedy z aplikácie classpath.
// Java code to demonstrate Class Loader subsystem public class Geeks { public static void main(String[] args) { // String class is loaded by bootstrap loader and // bootstrap loader is not Java object hence null System.out.println(String.class.getClassLoader()); // Test class is loaded by Application loader System.out.println(Geeks.class.getClassLoader()); } }
Výstup
null jdk.internal.loader.ClassLoaders$AppClassLoader@8bcc55f
2. Oblasti pamäte JVM
- Oblasť metódy: Ukladá informácie na úrovni triedy, ako sú premenné metód rodičovskej triedy názvu triedy a statické údaje. Zdieľané cez JVM.
- Oblasť haldy: Ukladá všetky predmety. Zdieľané cez JVM.
- Oblasť zásobníka: Každé vlákno má svoj vlastný runtime zásobník; ukladá volania metódy lokálne premenné do zásobníkových rámcov. Zničené, keď vlákno skončí.
- PC registre: Podržte adresu aktuálne vykonávanej inštrukcie pre každé vlákno.
- Zásobníky natívnej metódy: Každé vlákno má samostatný zásobník na vykonávanie natívnej metódy.
3. Vykonávací motor
Spúšťací mechanizmus vykoná .class (bytecode). Číta bajtový kód riadok po riadku, používa dáta a informácie prítomné v rôznych pamäťových oblastiach a vykonáva inštrukcie. Dá sa rozdeliť do troch častí:
- tlmočník: Interpretuje bajtový kód riadok po riadku a potom sa vykoná. Nevýhodou je, že keď sa jedna metóda volá viackrát vždy, keď je potrebná interpretácia.
- Just-In-Time Compiler (JIT): Používa sa na zvýšenie efektívnosti tlmočníka. Kompiluje celý bajtový kód a zmení ho na natívny kód, takže vždy, keď tlmočník vidí opakované volania metódy, JIT poskytuje priamy natívny kód pre túto časť, takže nie je potrebná opätovná interpretácia, čím sa zvyšuje účinnosť.
- Zberač odpadu: Ničí nereferencované objekty. Viac informácií o Garbage Collector nájdete Zberač odpadu .
4. Natívne rozhranie Java (JNI)
Je to rozhranie, ktoré spolupracuje s knižnicami natívnych metód a poskytuje natívne knižnice (C C++) potrebné na spustenie. Umožňuje JVM volať knižnice C/C++ a volať knižnice C/C++, ktoré môžu byť špecifické pre hardvér.
5. Knižnice natívnych metód
Toto sú kolekcie natívnych knižníc potrebných na vykonávanie natívnych metód. Zahŕňajú knižnice napísané v jazykoch ako C a C++.
sts stiahnuť