logo

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' title=

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' loading='lazy' title=

1. Nalaganje

prelivanje besed css
  • 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++.