logo

Arquitectura JVM (Java Virtual Machine).

  1. Màquina virtual Java
  2. Arquitectura interna de JVM

JVM (Java Virtual Machine) és una màquina abstracta. És una especificació que proporciona un entorn d'execució en el qual es pot executar bytecode Java.

Les JVM estan disponibles per a moltes plataformes de maquinari i programari (és a dir, JVM depèn de la plataforma).

Què és JVM

És:

  1. Una especificació on s'especifica el funcionament de la màquina virtual Java. Però el proveïdor d'implementació és independent per triar l'algorisme. La seva implementació ha estat proporcionada per Oracle i altres empreses.
  2. Una implementació La seva implementació es coneix com JRE (Java Runtime Environment).
  3. Instància d'execució Sempre que escriviu l'ordre java a l'indicador d'ordres per executar la classe java, es crea una instància de JVM.

Què fa

La JVM realitza l'operació següent:

  • Codi de càrrega
  • Verifica el codi
  • Executa codi
  • Proporciona un entorn d'execució

JVM proporciona definicions per a:

  • Àrea de memòria
  • Format de fitxer de classe
  • Registre establert
  • Munt recollit d'escombraries
  • Informe d'errors fatals, etc.

Arquitectura JVM

Entenem l'arquitectura interna de JVM. Conté carregador de classes, àrea de memòria, motor d'execució, etc.

java xor
Arquitectura JVM

1) Classloader

Classloader és un subsistema de JVM que s'utilitza per carregar fitxers de classe. Sempre que executem el programa java, el carregador de classes el carrega primer. Hi ha tres carregadors de classes integrats a Java.

    Bootstrap ClassLoader: Aquest és el primer carregador de classes que és la superclasse del carregador de classes d'extensió. Es carrega el rt.jar fitxer que conté tots els fitxers de classe de Java Standard Edition com les classes de paquets java.lang, classes de paquets java.net, classes de paquets java.util, classes de paquets java.io, classes de paquets java.sql, etc.Extensió ClassLoader: Aquest és el carregador de classes fill de Bootstrap i el carregador de classes principal del carregador de classes del sistema. Carrega els fitxers jar situats a l'interior $JAVA_HOME/jre/lib/ext directori.Sistema/aplicació ClassLoader: Aquest és el carregador de classes fill del carregador de classes d'extensió. Carrega els fitxers de classe des de classpath. Per defecte, classpath s'estableix al directori actual. Podeu canviar el camí de classe mitjançant l'interruptor '-cp' o '-classpath'. També es coneix com a carregador de classes d'aplicacions.
 //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()); } } 
Prova-ho ara

Sortida:

 sun.misc.Launcher$AppClassLoader@4e0e2f2a null 

Aquests són els carregadors de classes interns proporcionats per Java. Si voleu crear el vostre propi carregador de classes, heu d'ampliar la classe ClassLoader.

2) Àrea de classe (Mètode).

L'àrea Class(Mètode) emmagatzema estructures per classe, com ara l'agrupació constant de temps d'execució, dades de camp i mètode, el codi dels mètodes.

3) Munt

És l'àrea de dades de temps d'execució on s'assignen els objectes.

sistemes operatius mac

4) Pila

Java Stack emmagatzema marcs. Conté variables locals i resultats parcials, i té un paper en la invocació i el retorn del mètode.

Cada fil té una pila JVM privada, creada al mateix temps que el fil.

Es crea un marc nou cada vegada que s'invoca un mètode. Un marc es destrueix quan es completa la invocació del seu mètode.

np.clip

5) Registre de comptadors del programa

El registre de PC (comptador de programes) conté l'adreça de la instrucció de la màquina virtual Java que s'està executant actualment.

6) Pila de mètodes natius

Conté tots els mètodes natius utilitzats en l'aplicació.

7) Motor d'execució

Conté:

    Un processador virtual Intèrpret:Llegiu el flux de bytecode i executeu les instruccions.Compilador Just-In-Time (JIT):S'utilitza per millorar el rendiment. JIT compila parts del codi de bytes que tenen una funcionalitat similar al mateix temps i, per tant, redueix la quantitat de temps necessari per a la compilació. Aquí, el terme 'compilador' es refereix a un traductor del conjunt d'instruccions d'una màquina virtual Java (JVM) al conjunt d'instruccions d'una CPU específica.

8) Interfície nativa de Java

Java Native Interface (JNI) és un marc que proporciona una interfície per comunicar-se amb una altra aplicació escrita en un altre llenguatge com C, C++, Assembly, etc. Java utilitza el marc JNI per enviar resultats a la consola o interactuar amb les biblioteques del sistema operatiu.