Kako deluje JVM - arhitektura JVM

Kako deluje JVM - arhitektura JVM

Navidezni stroj Java (JVM) je osrednja komponenta izvajalnega okolja Java (JRE), ki omogoča izvajanje programov Java na kateri koli platformi brez spreminjanja. JVM deluje kot tolmač med bajtno kodo Java in osnovno strojno opremo, ki zagotavlja znamenito zmogljivost Jave Write Once Run Anywhere (WORA).

  • Vir Java (.java) -> prevedel javac -> bytecode (.class)
  • JVM naloži bajtno kodo, preveri, ali jo povezuje, in jo nato izvede
  • Izvajanje lahko vključuje tolmačenje bajtne kode ali uporabo prevajanja Just-In-Time (JIT) za pretvorbo vroče kode v izvorno strojno kodo za večjo zmogljivost
  • Zbiranje smeti teče v ozadju, da ponovno pridobi pomnilnik neuporabljenih predmetov

Arhitektura JVM

Spodnja slika prikazuje arhitekturo in ključne komponente JVM.

Jvm

Komponente arhitekture JVM

Zdaj bomo podrobno razpravljali o vsaki komponenti JVM.

1. Podsistem za nalaganje razredov

Odgovoren je predvsem za tri dejavnosti. 

class_loader_subsystem

1. Nalaganje

  • Bere datoteke .class in shranjuje metapodatke razreda v območju metod.
  • Ustvari predmet razreda v kopici, ki predstavlja naložen razred.
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  ();      }   }   

Izhod
Main method started. GFG class is loaded by the JVM! Class loaded successfully. Method of GFG class is executed.  

Opomba: Za vsako naloženo .razred samo datoteka eno predmet razreda je ustvarjen.

2. Povezovanje: Odgovoren za pripravo naloženega razreda za izvedbo. Vključuje tri korake:

  • Preverjanje: Zagotavlja, da bajtna koda sledi pravilom JVM in je varna za izvajanje.
  • Priprava: Dodeli pomnilnik za statične spremenljivke in dodeli privzete vrednosti.
  • Resolucija: Pretvori simbolne sklice v neposredne sklice v pomnilniku.

3. Inicializacija

  • Statičnim spremenljivkam dodeli dejanske vrednosti.
  • Izvaja statične bloke, definirane v razredu.

Vrste nalagalnika razredov

  • Nalagalnik razredov Bootstrap: Naloži osnovne razrede Java (JAVA_HOME/lib).
  • Nalagalnik razširitvenih razredov: Naloži razrede iz imenika razširitev (JAVA_HOME/jre/lib/ext).
  • Nalagalnik razreda sistema/aplikacije: Naloži razrede iz poti razreda 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  ());      }   }   

Izhod
null jdk.internal.loader.ClassLoaders$AppClassLoader@8bcc55f  

2. Območja pomnilnika JVM

  • Področje metode: Shranjuje informacije na ravni razreda, kot je ime razreda, spremenljivke metod nadrejenega razreda in statične podatke. V skupni rabi v JVM.
  • Območje kopice: Shranjuje vse predmete. V skupni rabi v JVM.
  • Območje sklada: Vsaka nit ima svoj sklad izvajalnega okolja; shranjuje metoda kliče lokalne spremenljivke v okvirih sklada. Uničeno, ko se nit konča.
  • PC registri: Za vsako nit zadržite naslov trenutno izvajajočega se ukaza.
  • Naravni nizi metod: Vsaka nit ima ločen sklad za izvajanje izvorne metode.

3. Izvedbeni motor 

Izvajalni mehanizem izvaja .class (bajtno kodo). Bere bajtno kodo vrstico za vrstico, uporablja podatke in informacije, ki so prisotni v različnih pomnilniških območjih, in izvaja navodila. Razvrstimo ga lahko v tri dele:

  • Tolmač: Tolmači bajtno kodo vrstico za vrstico in nato izvede. Pomanjkljivost tukaj je, da je pri večkratnem klicu ene metode vsakič potrebna interpretacija.
  • Pravočasni prevajalnik (JIT): Uporablja se za povečanje učinkovitosti tolmača. Prevede celotno bajtno kodo in jo spremeni v izvorno kodo, tako da kadar koli tolmač vidi ponovljene klice metode, JIT zagotovi neposredno izvorno kodo za ta del, tako da ponovna interpretacija ni potrebna, s čimer je učinkovitost izboljšana.
  • Zbiralec smeti: Uniči nereferencirane predmete. Za več o Garbage Collector glejte Zbiralec smeti .

4. Izvorni vmesnik Java (JNI)

To je vmesnik, ki sodeluje s knjižnicami izvornih metod in zagotavlja izvorne knjižnice (C C++), potrebne za izvajanje. Omogoča, da JVM kliče knjižnice C/C++ in da ga kličejo knjižnice C/C++, ki so lahko specifične za strojno opremo.

5. Knjižnice izvornih metod

To so zbirke izvornih knjižnic, potrebnih za izvajanje izvornih metod. Vključujejo knjižnice, napisane v jezikih, kot sta C in C++.


Ustvari kviz