logo

Kaip veikia JVM – JVM architektūra

„Java“ virtualioji mašina (JVM) yra pagrindinis „Java Runtime Environment“ (JRE) komponentas, leidžiantis Java programoms veikti bet kurioje platformoje be pakeitimų. JVM veikia kaip vertėjas tarp „Java“ baitinio kodo ir pagrindinės aparatinės įrangos, suteikiančios garsiąją „Java“ rašymo kartą paleisti bet kur (WORA) galimybę.

  • „Java“ šaltinis (.java) –> sukompiliuotas javac –> baitinis kodas (.class)
  • JVM įkelia baito kodą, patikrina, ar jis susieja, ir tada vykdo
  • Vykdant gali reikėti interpretuoti baitinį kodą arba naudoti „Just-In-Time“ (JIT) kompiliavimą, kad karštasis kodas konvertuotų į savąjį mašinos kodą, kad būtų užtikrintas našumas.
  • Šiukšlių rinkimas vyksta fone, kad atgautų atmintį iš nenaudojamų objektų

JVM architektūra

Toliau pateiktame paveikslėlyje parodyta JVM architektūra ir pagrindiniai komponentai.

Jvm' title=

JVM architektūros komponentai

Dabar mes išsamiai aptarsime kiekvieną JVM komponentą.



1. Klasių kroviklio posistemis

Ji daugiausia atsakinga už tris veiklas. 

class_loader_posistemė' loading='lazy' title=

1. Pakrovimas

  • Skaito .class failus ir saugo klasės metaduomenis metodų srityje.
  • Sukuria klasės objektą krūvoje, vaizduojančioje įkeltą klasę.
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();  } } 

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

Pastaba: Už kiekvieną pakrautą .klasė tik failas vienas sukuriamas klasės objektas.

2. Susiejimas: Atsakingas už įkeltos klasės paruošimą vykdymui. Jį sudaro trys žingsniai:

  • Patvirtinimas: Užtikrina, kad baito kodas atitiktų JVM taisykles ir būtų saugus vykdyti.
  • Paruošimas: Skiria atmintį statiniams kintamiesiems ir priskiria numatytąsias reikšmes.
  • Rezoliucija: Paverčia simbolines nuorodas į tiesiogines nuorodas atmintyje.

3. Inicializavimas

  • Statiniams kintamiesiems priskiria faktines reikšmes.
  • Vykdo statinius blokus, apibrėžtus klasėje.

Klasių krautuvų tipai

  • Bootstrap klasės įkroviklis: Įkelia pagrindines Java klases (JAVA_HOME/lib).
  • Pratęsimo klasės įkroviklis: Įkelia klases iš plėtinių katalogo (JAVA_HOME/jre/lib/ext).
  • Sistemos / taikomųjų programų klasės įkroviklis: Įkelia klases iš programos klasės kelio.
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());  } } 

Išvestis
null jdk.internal.loader.ClassLoaders$AppClassLoader@8bcc55f 

2. JVM atminties sritys

  • Metodo sritis: Saugo klasės lygio informaciją, pvz., klasės pavadinimą, pirminių klasių metodų kintamuosius ir statinius duomenis. Bendrinamas visoje JVM.
  • Krūvos sritis: Saugo visus objektus. Bendrinamas visoje JVM.
  • Krūvos sritis: Kiekviena gija turi savo vykdymo laiką; saugo metodą, iškviečia vietinius kintamuosius kamino rėmeliuose. Sunaikinama, kai baigiasi siūlas.
  • Kompiuterių registrai: Laikykite kiekvienos gijos šiuo metu vykdomos instrukcijos adresą.
  • Savųjų metodų krūvos: Kiekviena gija turi atskirą krūvą vietiniam metodui vykdyti.

3. Vykdymo variklis 

Vykdymo variklis vykdo .klasę (baito kodą). Jis skaito baitų kodą eilutę po eilutės, naudoja duomenis ir informaciją, esančią įvairiose atminties srityse, ir vykdo instrukcijas. Jį galima suskirstyti į tris dalis:

  • Vertėjas: Ji interpretuoja baito kodą eilutę po eilutės ir tada vykdo. Trūkumas yra tas, kad kai vienas metodas iškviečiamas kelis kartus kiekvieną kartą, kai reikia interpretuoti.
  • „Just-In-Time“ kompiliatorius (JIT): Jis naudojamas vertėjo veiksmingumui padidinti. Jis sukompiliuoja visą baitinį kodą ir pakeičia jį į vietinį kodą, taigi, kai vertėjas mato pasikartojančius metodų iškvietimus, JIT pateikia tiesioginį vietinį tos dalies kodą, todėl iš naujo interpretuoti nereikia, todėl padidėja efektyvumas.
  • Šiukšlių surinkėjas: Jis sunaikina nenurodytus objektus. Daugiau apie šiukšlių surinkėją rasite Šiukšlių surinkėjas .

4. „Java Native Interface“ (JNI)

Tai sąsaja, kuri sąveikauja su savųjų metodų bibliotekomis ir teikia savąsias bibliotekas (C C++), reikalingas vykdymui. Tai leidžia JVM iškviesti C/C++ bibliotekas ir C/C++ bibliotekas, kurios gali būti būdingos aparatinei įrangai.

5. Native Method Libraries

Tai yra vietinių bibliotekų rinkiniai, reikalingi vietiniams metodams vykdyti. Tai apima bibliotekas, parašytas tokiomis kalbomis kaip C ir C++.