logo

Arhitectura JVM (Java Virtual Machine).

  1. Mașină virtuală Java
  2. Arhitectura internă a JVM

JVM (Java Virtual Machine) este o mașină abstractă. Este o specificație care oferă un mediu de rulare în care poate fi executat bytecode java.

JVM-urile sunt disponibile pentru multe platforme hardware și software (adică JVM depinde de platformă).

Ce este JVM

Este:

imprimare model stea
  1. O specificație unde este specificată funcționarea mașinii virtuale Java. Dar furnizorul de implementare este independent pentru a alege algoritmul. Implementarea sa a fost asigurată de Oracle și alte companii.
  2. O implementare Implementarea sa este cunoscută ca JRE (Java Runtime Environment).
  3. Instanță de rulare Ori de câte ori scrieți comanda java pe promptul de comandă pentru a rula clasa java, este creată o instanță a JVM.

Ce face

JVM-ul efectuează următoarea operație:

  • Încarcă codul
  • Verifică codul
  • Execută cod
  • Oferă mediu de rulare

JVM oferă definiții pentru:

  • Zona de memorie
  • Format de fișier de clasă
  • Registru setat
  • Morman adunat cu gunoi
  • Raportarea erorilor fatale etc.

Arhitectura JVM

Să înțelegem arhitectura internă a JVM. Conține classloader, zonă de memorie, motor de execuție etc.

Arhitectura JVM

1) Classloader

Classloader este un subsistem JVM care este folosit pentru a încărca fișiere de clasă. Ori de câte ori rulăm programul java, acesta este încărcat mai întâi de classloader. Există trei classloadere încorporate în Java.

    Bootstrap ClassLoader: Acesta este primul classloader care este super-clasa a Extension classloader. Încarcă rt.jar fișier care conține toate fișierele de clasă ale Java Standard Edition, cum ar fi clasele de pachete java.lang, clasele de pachete java.net, clasele de pachete java.util, clasele de pachete java.io, clasele de pachete java.sql etc.Extensie ClassLoader: Acesta este încărcătorul de clasă copil al Bootstrap și încărcătorul de clasă părinte al încărcătorul de clasă System. Încarcă fișierele jar aflate în interior $JAVA_HOME/jre/lib/ext director.Sistem/Aplicație ClassLoader: Acesta este elementul de încărcare de clasă secundar al Extension classloader. Încarcă fișierele de clasă din classpath. În mod implicit, classpath este setată la directorul curent. Puteți schimba calea clasei folosind comutatorul „-cp” sau „-classpath”. Este, de asemenea, cunoscut sub numele de aplicație classloader.
 //Let's see an example to print the classloader name public class ClassLoaderExample { public static void main(String[] args) { // Let's print the classloader name of current class. //Application/System classloader will load this class Class c=ClassLoaderExample.class; System.out.println(c.getClassLoader()); //If we print the classloader name of String, it will print null because it is an //in-built class which is found in rt.jar, so it is loaded by Bootstrap classloader System.out.println(String.class.getClassLoader()); } } 
Testează-l acum

Ieșire:

cum să recuperezi aplicațiile ascunse
 sun.misc.Launcher$AppClassLoader@4e0e2f2a null 

Acestea sunt încărcătoarele interne de clasă furnizate de Java. Dacă doriți să vă creați propriul classloader, trebuie să extindeți clasa ClassLoader.

2) Zona de clasă (metodă).

Clasă (Metodă) Aria stochează structuri pe clasă, cum ar fi pool-ul de constante de rulare, câmpul și datele metodei, codul pentru metode.

1 la 100 roman nr

3) grămada

Este zona de date de rulare în care sunt alocate obiectele.

4) Stiva

Java Stack stochează cadre. Acesta conține variabile locale și rezultate parțiale și joacă un rol în invocarea și returnarea metodei.

Fiecare thread are o stivă JVM privată, creată în același timp cu firul.

Un nou cadru este creat de fiecare dată când este invocată o metodă. Un cadru este distrus când se încheie invocarea metodei sale.

5) Program Counter Register

Registrul PC (contor de programe) conține adresa instrucțiunii mașinii virtuale Java în curs de executare.

6) Stiva de metode native

Conține toate metodele native utilizate în aplicație.

ce este o stivă java

7) Motor de execuție

Contine:

    Un procesor virtual Interpret:Citiți fluxul de bytecode apoi executați instrucțiunile.Compilatorul Just-In-Time(JIT):Este folosit pentru a îmbunătăți performanța. JIT compilează părți ale codului octet care au funcționalități similare în același timp și, prin urmare, reduce timpul necesar pentru compilare. Aici, termenul „compilator” se referă la un traducător din setul de instrucțiuni al unei mașini virtuale Java (JVM) la setul de instrucțiuni al unui anumit CPU.

8) Interfață nativă Java

Java Native Interface (JNI) este un cadru care oferă o interfață pentru a comunica cu o altă aplicație scrisă într-un alt limbaj, cum ar fi C, C++, Assembly etc. Java folosește cadrul JNI pentru a trimite rezultate către Consolă sau pentru a interacționa cu bibliotecile OS.