Ako funguje JVM - Architektúra JVM

Ako funguje JVM - Architektúra JVM

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).

  • 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.

Jvm

Teraz budeme podrobne diskutovať o každom komponente JVM.



class_loader_subsystem

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.
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  ();      }   }   

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

2. Prepojenie: Zodpovedný za prípravu načítanej triedy na vykonanie. Zahŕňa tri kroky:

  • 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

Typy nakladačov triedy

  • Bootstrap Class Loader:
  • 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
   // 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++.


Vytvoriť kvíz

Najlepšie Články

Kategórie

Zaujímavé Články