logo

Архітектура JVM (Віртуальна машина Java).

  1. Віртуальна машина Java
  2. Внутрішня архітектура JVM

JVM (Віртуальна машина Java) — це абстрактна машина. Це специфікація, яка забезпечує середовище виконання, в якому може виконуватися байт-код Java.

JVM доступні для багатьох апаратних і програмних платформ (тобто JVM залежить від платформи).

Що таке JVM

Це є:

  1. Специфікація де вказано роботу віртуальної машини Java. Але постачальник реалізації незалежний у виборі алгоритму. Його впровадження забезпечили Oracle та інші компанії.
  2. Реалізація Його реалізація відома як JRE (Java Runtime Environment).
  3. Екземпляр середовища виконання Щоразу, коли ви пишете команду java в командному рядку для запуску класу java, створюється екземпляр JVM.

Що воно робить

JVM виконує наступну операцію:

  • Завантажує код
  • Перевіряє код
  • Виконує код
  • Забезпечує середовище виконання

JVM надає визначення для:

  • Область пам'яті
  • Формат файлу класу
  • Набір реєстрів
  • Куча сміття
  • Повідомлення про фатальну помилку тощо.

Архітектура JVM

Давайте розберемося з внутрішньою архітектурою JVM. Він містить завантажувач класів, область пам’яті, механізм виконання тощо.

Архітектура JVM

1) Завантажувач класів

Classloader — це підсистема JVM, яка використовується для завантаження файлів класів. Щоразу, коли ми запускаємо програму Java, вона спочатку завантажується завантажувачем класів. У Java є три вбудовані завантажувачі класів.

    Bootstrap ClassLoader: Це перший завантажувач класів, який є суперкласом завантажувача класів розширення. Це завантажує rt.jar файл, який містить усі файли класів Java Standard Edition, такі як класи пакетів java.lang, класи пакетів java.net, класи пакетів java.util, класи пакетів java.io, класи пакетів java.sql тощо.Розширення ClassLoader: Це дочірній завантажувач класів Bootstrap і батьківський завантажувач класів System. Він завантажує файли jar, розташовані всередині $JAVA_HOME/jre/lib/ext каталог.System/Application ClassLoader: Це дочірній завантажувач класів Extension classloader. Він завантажує файли класів зі шляху до класів. За замовчуванням шлях до класу встановлюється на поточний каталог. Ви можете змінити шлях до класу за допомогою перемикача «-cp» або «-classpath». Він також відомий як завантажувач класів додатків.
 //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) Область класу (методи).

Область Class(Method) зберігає структури для кожного класу, такі як пул констант часу виконання, дані полів і методів, код для методів.

3) Купа

Це область даних виконання, в якій розміщуються об’єкти.

4) Стек

Java Stack зберігає кадри. Він містить локальні змінні та часткові результати, а також бере участь у виклику та поверненні методу.

Кожен потік має приватний стек JVM, створений одночасно з потоком.

Щоразу, коли викликається метод, створюється новий кадр. Кадр знищується, коли завершується виклик його методу.

5) Реєстр лічильника програми

Регістр PC (програмний лічильник) містить адресу інструкції віртуальної машини Java, яка виконується в даний момент.

6) Нативний стек методів

Він містить усі власні методи, які використовуються в додатку.

7) Механізм виконання

Це містить:

    Віртуальний процесор Перекладач:Прочитайте потік байт-коду, а потім виконайте інструкції.Компілятор Just-In-Time (JIT):Використовується для підвищення продуктивності. JIT компілює частини байт-коду, які мають аналогічні функції одночасно, і, отже, зменшує час, необхідний для компіляції. Тут термін «компілятор» відноситься до транслятора з набору інструкцій віртуальної машини Java (JVM) в набір інструкцій конкретного ЦП.

8) Рідний інтерфейс Java

Рідний інтерфейс Java (JNI) — це структура, яка забезпечує інтерфейс для зв’язку з іншою програмою, написаною іншою мовою, як-от C, C++, Assembly тощо. Java використовує структуру JNI для надсилання виводу на консоль або взаємодії з бібліотеками ОС.