logo

Kako radi JVM - JVM arhitektura

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.

Jvm' title=

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. 

podsustav_učitavača_klase' loading='lazy' title=

1. Učitavanje

  • Čita .class datoteke i pohranjuje metapodatke klase u području metoda.
  • Stvara objekt klase u gomili koji predstavlja učitanu klasu.
Java
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
// 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++.