logo

JVM (Java Virtual Machine) architektúra

  1. Java virtuális gép
  2. A JVM belső építészete

A JVM (Java Virtual Machine) egy absztrakt gép. Ez egy olyan specifikáció, amely futási környezetet biztosít, amelyben a java bájtkód végrehajtható.

A JVM-ek számos hardver- és szoftverplatformhoz elérhetők (azaz a JVM platformfüggő).

Mi az a JVM

Ez:

  1. Egy specifikáció ahol meg van adva a Java Virtual Machine működése. De a megvalósítás szolgáltatója független az algoritmus kiválasztásától. A megvalósítást az Oracle és más cégek biztosították.
  2. Egy megvalósítás Megvalósítása JRE (Java Runtime Environment) néven ismert.
  3. Futásidejű példány Amikor a java osztály futtatásához java parancsot ír a parancssorba, létrejön a JVM egy példánya.

Mit csinál

A JVM a következő műveleteket hajtja végre:

  • Kód betöltése
  • Ellenőrzi a kódot
  • Kódot hajt végre
  • Futási környezetet biztosít

A JVM definíciókat ad a következőkhöz:

  • Memória terület
  • Osztály fájlformátuma
  • Regisztráció készlet
  • Összegyűjtött szemétdomb
  • Végzetes hibajelentés stb.

JVM építészet

Ismerjük meg a JVM belső architektúráját. Tartalmaz osztálybetöltőt, memóriaterületet, végrehajtó motort stb.

JVM építészet

1) Osztályfeltöltő

A Classloader a JVM alrendszere, amely osztályfájlok betöltésére szolgál. Amikor futtatjuk a java programot, először az osztálybetöltő tölti be. A Java-ban három beépített osztálybetöltő található.

    Bootstrap ClassLoader: Ez az első osztálybetöltő, amely az Extension classloader szuperosztálya. Feltölti a rt.jar fájl, amely tartalmazza a Java Standard Edition összes osztályfájlját, például java.lang csomagosztályokat, java.net csomagosztályokat, java.util csomagosztályokat, java.io csomagosztályokat, java.sql csomagosztályokat stb.Extension ClassLoader: Ez a Bootstrap gyermek osztálybetöltője és a System classloader szülő osztálybetöltője. Betölti a benne található jar fájlokat $JAVA_HOME/jre/lib/ext Könyvtár.Rendszer/alkalmazás osztálybetöltő: Ez az Extension classloader gyermekosztálybetöltője. Az osztályfájlokat az osztályútvonalról tölti be. Alapértelmezés szerint az osztályút az aktuális könyvtárra van állítva. Az osztályútvonalat a '-cp' vagy '-classpath' kapcsolóval módosíthatja. Alkalmazás osztálybetöltőként is ismert.
 //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()); } } 
Tesztelje most

Kimenet:

 sun.misc.Launcher$AppClassLoader@4e0e2f2a null 

Ezek a Java által biztosított belső osztálybetöltők. Ha saját osztálybetöltőt szeretne létrehozni, ki kell bővítenie a ClassLoader osztályt.

2) Osztály(Módszer) Terület

A Class(Method) Area osztályonkénti struktúrákat tárol, például a futásidejű állandó készletet, a mező- és metódusadatokat, valamint a metódusok kódját.

3) Halom

Ez az a futásidejű adatterület, amelyben az objektumok le vannak foglalva.

4) Verem

A Java Stack kereteket tárol. Helyi változókat és részeredményeket tartalmaz, és szerepet játszik a metódusok meghívásában és visszatérésében.

Minden szálhoz tartozik egy privát JVM-verem, amely a szálakkal egy időben jön létre.

Minden alkalommal új keret jön létre, amikor egy metódust meghívnak. Egy keret megsemmisül, amikor a metódushívása befejeződik.

5) Program Counter Register

A PC (programszámláló) regiszter tartalmazza az éppen végrehajtott Java virtuális gép utasítás címét.

6) Native Method Stack

Tartalmazza az alkalmazásban használt összes natív módszert.

mi az a desktop ini

7) Végrehajtó motor

Tartalmaz:

    Virtuális processzor Tolmács:Olvassa el a bájtkód folyamot, majd hajtsa végre az utasításokat.Just-In-Time (JIT) fordító:A teljesítmény javítására szolgál. A JIT egyidejűleg fordítja le a bájtkód olyan részeit, amelyek hasonló funkcionalitásúak, és ezáltal csökkenti a fordításhoz szükséges időt. Itt a „fordító” kifejezés egy Java virtuális gép (JVM) utasításkészletéből egy adott CPU utasításkészletébe történő fordítóra utal.

8) Java natív felület

A Java Native Interface (JNI) egy olyan keretrendszer, amely interfészt biztosít egy másik nyelven írt alkalmazással való kommunikációhoz, például C, C++, Assembly stb. A Java a JNI keretrendszert használja a kimenetek konzolra küldésére vagy az operációs rendszer könyvtáraival való interakcióra.