logo

JVM (Java Virtual Machine) архитектура

  1. Java виртуална машина
  2. Вътрешна архитектура на JVM

JVM (Java Virtual Machine) е абстрактна машина. Това е спецификация, която предоставя среда за изпълнение, в която може да се изпълнява java байт код.

JVM са налични за много хардуерни и софтуерни платформи (т.е. JVM зависи от платформата).

Какво е JVM

То е:

  1. Спецификация където е посочена работата на Java Virtual Machine. Но доставчикът на внедряване е независим при избора на алгоритъм. Внедряването му е осигурено от Oracle и други компании.
  2. Реализация Реализацията му е известна като JRE (Java Runtime Environment).
  3. Екземпляр по време на изпълнение Всеки път, когато пишете java команда в командния ред, за да стартирате java класа, се създава екземпляр на JVM.

Какво прави

JVM изпълнява следната операция:

  • Зарежда код
  • Потвърждава кода
  • Изпълнява код
  • Осигурява среда за изпълнение

JVM предоставя дефиниции за:

  • Област на паметта
  • Файлов формат на класа
  • Регистрирайте се
  • Събрана купчина боклук
  • Докладване за фатална грешка и др.

JVM архитектура

Нека разберем вътрешната архитектура на JVM. Той съдържа програма за зареждане на класове, област на паметта, механизъм за изпълнение и т.н.

JVM архитектура

1) Classloader

Classloader е подсистема на JVM, която се използва за зареждане на клас файлове. Всеки път, когато стартираме java програмата, тя се зарежда първо от програмата за зареждане на класове. В Java има три вградени програми за зареждане на класове.

    Bootstrap ClassLoader: Това е първият зареждащ клас, който е супер класът на зареждащия клас за разширение. Зарежда на rt.jar файл, който съдържа всички клас файлове на Java Standard Edition като класове пакети java.lang, класове пакети java.net, класове пакети java.util, класове пакети java.io, класове пакети java.sql и др.Разширение ClassLoader: Това е дъщерното средство за зареждане на класове на Bootstrap и родителско средство за зареждане на класове на System classloader. Той зарежда jar файловете, намиращи се вътре $JAVA_HOME/jre/lib/ext указател.Система/Приложение ClassLoader: Това е дъщерният зареждащ клас на Extension classloader. Той зарежда клас файловете от classpath. По подразбиране classpath е зададен на текущата директория. Можете да промените пътя на класа, като използвате превключвателя '-cp' или '-classpath'. Известен е също като Application 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()); } } 
Тествайте сега

Изход:

 sun.misc.Launcher$AppClassLoader@4e0e2f2a null 

Това са вътрешните програми за зареждане на класове, предоставени от Java. Ако искате да създадете свой собствен клас зареждане, трябва да разширите класа ClassLoader.

2) Област на клас (метод).

Областта за клас (метод) съхранява структури за клас, като пул от константи по време на изпълнение, данни за поле и метод, код за методи.

3) Купчина

Това е областта за данни по време на изпълнение, в която се разпределят обектите.

4) Стек

Java Stack съхранява рамки. Той съдържа локални променливи и частични резултати и играе роля в извикването и връщането на метода.

Всяка нишка има частен JVM стек, създаден едновременно с нишката.

Нов кадър се създава всеки път, когато се извиква метод. Кадър се унищожава, когато извикването на метода му завърши.

5) Регистър на брояча на програмата

PC (програмен брояч) регистър съдържа адреса на инструкцията на Java виртуалната машина, която се изпълнява в момента.

6) Стек от собствени методи

Той съдържа всички собствени методи, използвани в приложението.

7) Двигател за изпълнение

Съдържа:

    Виртуален процесор Преводач:Прочетете потока от байт код, след което изпълнете инструкциите.Компилатор Just-In-Time (JIT):Използва се за подобряване на производителността. JIT компилира части от байт кода, които имат подобна функционалност едновременно и по този начин намалява времето, необходимо за компилиране. Тук терминът „компилатор“ се отнася до преводач от набора от инструкции на виртуална машина на Java (JVM) към набора от инструкции на конкретен процесор.

8) Java Native интерфейс

Java Native Interface (JNI) е рамка, която предоставя интерфейс за комуникация с друго приложение, написано на друг език като C, C++, Assembly и др. Java използва JNI framework за изпращане на изход към конзолата или за взаимодействие с библиотеки на ОС.