Java Virtual Machine (JVM) ključna je komponenta Java Runtime Environment (JRE) koja omogućuje pokretanje Java programa na bilo kojoj platformi bez modifikacija. JVM djeluje kao tumač između Java bajt koda i temeljnog hardvera pružajući Javinu poznatu sposobnost Write Once Run Anywhere (WORA).
- Java izvor (.java) -> kompilirao javac -> bytecode (.class)
- JVM učitava bajt kod, provjerava da ga povezuje i zatim ga izvršava
- Izvršenje može uključivati tumačenje bajt koda ili korištenje Just-In-Time (JIT) kompilacije za pretvaranje vrućeg koda u izvorni strojni kod za izvedbu
- Skupljanje smeća radi u pozadini kako bi se oslobodila memorija od neiskorištenih objekata
Arhitektura JVM-a
Slika ispod prikazuje arhitekturu i ključne komponente JVM-a.
Komponente JVM arhitekture
Sada ćemo detaljno raspravljati o svakoj komponenti JVM-a.
pawandeep rajan
1. Podsustav za učitavanje klasa
Uglavnom je odgovoran za tri aktivnosti.
1. Učitavanje
- Čita .class datoteke i pohranjuje metapodatke klase u području metoda.
- Stvara objekt klase u gomili koji predstavlja učitanu klasu.
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(); } }
Izlaz
Main method started. GFG class is loaded by the JVM! Class loaded successfully. Method of GFG class is executed.
Bilješka: Za svaki opterećeni .razred samo datoteka jedan kreiran je objekt klase.
2. Povezivanje: Odgovoran za pripremu učitane klase za izvođenje. Uključuje tri koraka:
- Provjera: Osigurava da bajt-kod slijedi JVM pravila i da je siguran za izvođenje.
- priprema: Dodjeljuje memoriju za statičke varijable i dodjeljuje zadane vrijednosti.
- rezolucija: Pretvara simboličke reference u izravne reference u memoriji.
3. Inicijalizacija
- Dodjeljuje stvarne vrijednosti statičkim varijablama.
- Izvršava statičke blokove definirane u klasi.
Tipovi učitavača klasa
- Bootstrap učitavač klase: Učitava osnovne Java klase (JAVA_HOME/lib).
- Učitavač klase proširenja: Učitava klase iz direktorija proširenja (JAVA_HOME/jre/lib/ext).
- Učitavač klase sustava/aplikacije: Učitava klase iz staze klase aplikacije.
// 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()); } }
Izlaz
null jdk.internal.loader.ClassLoaders$AppClassLoader@8bcc55f
2. JVM memorijska područja
- Područje metode: Pohranjuje informacije na razini klase kao što je naziv klase roditeljske metode varijable i statičke podatke. Dijeli se preko JVM-a.
- Područje hrpe: Pohranjuje sve predmete. Dijeli se preko JVM-a.
- Područje hrpe: Svaka nit ima vlastiti runtime stack; pohranjuje metoda poziva lokalne varijable u okvirima hrpa. Uništava se kada nit završi.
- PC registri: Zadržite adresu trenutno izvršavajuće instrukcije za svaku nit.
- Stogovi izvornih metoda: Svaka nit ima zaseban stog za izvođenje izvorne metode.
3. Izvršni motor
Izvršni mehanizam izvršava .class (bajt kod). Čita bajt-kod redak po redak, koristi podatke i informacije prisutne u različitim memorijskim područjima i izvršava upute. Može se klasificirati u tri dijela:
- Prevoditelj: Interpretira bajt kod red po red i zatim ga izvršava. Nedostatak je u tome što kada se jedna metoda poziva više puta svaki put je potrebna interpretacija.
- Just-in-Time Compiler (JIT): Koristi se za povećanje učinkovitosti tumača. Kompajlira cijeli bajt kod i mijenja ga u izvorni kod tako da kad god tumač vidi ponovljene pozive metoda, JIT pruža izravan izvorni kod za taj dio tako da ponovno tumačenje nije potrebno, čime se poboljšava učinkovitost.
- Skupljač smeća: Uništava nereferencirane objekte. Za više informacija o Garbage Collectoru pogledajte Skupljač smeća .
4. Java izvorno sučelje (JNI)
To je sučelje koje je u interakciji s bibliotekama izvornih metoda i pruža izvorne biblioteke (C C++) potrebne za izvođenje. Omogućuje JVM-u da poziva C/C++ biblioteke i da ga pozivaju C/C++ biblioteke koje mogu biti specifične za hardver.
5. Knjižnice izvornih metoda
Ovo su zbirke izvornih biblioteka potrebnih za izvođenje izvornih metoda. Oni uključuju biblioteke napisane u jezicima poput C i C++.