JVM (Java Virtual Machine) е абстрактна машина. Това е спецификация, която предоставя среда за изпълнение, в която може да се изпълнява java байт код.
JVM са налични за много хардуерни и софтуерни платформи (т.е. JVM зависи от платформата).
Какво е JVM
То е:
- Спецификация където е посочена работата на Java Virtual Machine. Но доставчикът на внедряване е независим при избора на алгоритъм. Внедряването му е осигурено от Oracle и други компании.
- Реализация Реализацията му е известна като JRE (Java Runtime Environment).
- Екземпляр по време на изпълнение Всеки път, когато пишете java команда в командния ред, за да стартирате java класа, се създава екземпляр на JVM.
Какво прави
JVM изпълнява следната операция:
- Зарежда код
- Потвърждава кода
- Изпълнява код
- Осигурява среда за изпълнение
JVM предоставя дефиниции за:
- Област на паметта
- Файлов формат на класа
- Регистрирайте се
- Събрана купчина боклук
- Докладване за фатална грешка и др.
JVM архитектура
Нека разберем вътрешната архитектура на JVM. Той съдържа програма за зареждане на класове, област на паметта, механизъм за изпълнение и т.н.
1) Classloader
Classloader е подсистема на JVM, която се използва за зареждане на клас файлове. Всеки път, когато стартираме java програмата, тя се зарежда първо от програмата за зареждане на класове. В Java има три вградени програми за зареждане на класове.
//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) Двигател за изпълнение
Съдържа:
8) Java Native интерфейс
Java Native Interface (JNI) е рамка, която предоставя интерфейс за комуникация с друго приложение, написано на друг език като C, C++, Assembly и др. Java използва JNI framework за изпращане на изход към конзолата или за взаимодействие с библиотеки на ОС.