Що таке JVM?
Віртуальна машина Java (JVM) - це механізм, який забезпечує середовище виконання для керування кодом Java або додатками. Він перетворює байт-код Java у мову машин. JVM є частиною Java Run Environment (JRE). В інших мовах програмування компілятор виробляє машинний код для певної системи. Однак компілятор Java виробляє код для віртуальної машини, відомої як Java Virtual Machine.
Ось як працює JVM
По-перше, код Java відповідає байт-коду. Цей байт-код інтерпретується на різних машинах
Між хост-системою та джерелом Java Bytecode є посередницькою мовою.
JVM в Java відповідає за розподіл місця в пам'яті.
У цьому посібнику з JVM ви дізнаєтесь-
- Архітектура JVM
- Процес компіляції та виконання програмного коду
- Процес компіляції та виконання коду С
- Процес компіляції та виконання коду Java
- Чому Java інтерпретується та компілюється?
- Чому Java працює повільно?
Архітектура JVM
Тепер у цьому посібнику з JVM давайте розберемося з архітектурою JVM. Архітектура JVM в Java містить завантажувач класів, область пам'яті, механізм виконання тощо.1) ClassLoader
Завантажувач класів - це підсистема, яка використовується для завантаження файлів класів. Він виконує три основні функції, а саме: Завантаження, зв’язування та ініціалізація.
2) Область методу
Область методів JVM зберігає структури класів, такі як метадані, постійний пул виконання та код методів.
3) Купи
Усі Об'єкти, пов'язані з ними змінні екземпляра та масиви зберігаються в купі. Ця пам’ять є спільною та спільною для кількох потоків.
4) Мовні стеки JVM
Мовні стеки Java зберігають локальні змінні, і це часткові результати. Кожен потік має власний стек JVM, створений одночасно із створенням потоку. Новий кадр створюється щоразу, коли викликається метод, і він видаляється, коли процес виклику методу завершено.
5) Реєстри ПК
Реєстр ПК зберігає адресу інструкції віртуальної машини Java, яка виконується в даний час. У Java кожен потік має свій окремий регістр ПК.
6) Нативні стеки методів
Власні стеки методів містять інструкції власного коду, що залежить від власної бібліотеки. Написано іншою мовою замість Java.
7) Двигун виконання
Це тип програмного забезпечення, що використовується для тестування обладнання, програмного забезпечення або комплектних систем. Механізм виконання тесту ніколи не містить жодної інформації про тестований продукт.
8) Інтерфейс рідного методу
Інтерфейс власного методу - це програма програмування. Це дозволяє коду Java, який працює в JVM, викликати бібліотеки та власні програми.
9) Бібліотеки рідних методів
Нативні бібліотеки - це сукупність власних бібліотек (C, C ++), які потрібні Execution Engine.
Процес компіляції та виконання програмного коду
Для того, щоб писати та виконувати програму, вам потрібно наступне
1) Редактор - для введення вашої програми для цього можна використовувати блокнот
2) Компілятор - для перетворення високомовної програми на власний машинний код
3) Linker - щоб поєднати різні посилання на файли програм у вашій головній програмі разом.
4) Завантажувач - для завантаження в оперативну пам’ять файлів із додаткового пристрою зберігання, таких як жорсткий диск, флеш-диск, компакт-диск. Завантаження виконується автоматично при виконанні коду.
5) Виконання - Фактичне виконання коду, який обробляється Вашою ОС та процесором.
З цим фоном зверніться до наступного відео та дізнайтеся про внутрішню роботу JVM та архітектуру JVM (віртуальна машина Java).
Клацніть тут, якщо відео недоступне
Процес компіляції та виконання коду С
Щоб зрозуміти процес компіляції Java на Java. Давайте спочатку швидко розглянемо процес компіляції та зв’язування в C.
Припустимо, в основному ви викликали дві функції f1 і f2. Основна функція зберігається у файлі a1.c.
Функція f1 зберігається у файлі a2.c
Функція f2 зберігається у файлі a3.c
Всі ці файли, тобто a1.c, a2.c та a3.c, подаються до компілятора. На виході є відповідні об'єктні файли, що є машинним кодом.
Наступним кроком є інтеграція всіх цих об’єктних файлів в один файл .exe за допомогою компоновщика. Посилання об’єднає всі ці файли разом і створить файл .exe.
Під час запуску програми програма завантажувача завантажує a.exe в оперативну пам'ять для виконання.
Компіляція та виконання коду Java у Java VM
Тепер у цьому посібнику з JVM давайте розглянемо процес створення JAVA. В основному у вас є два методи f1 та f2.
- Основний метод зберігається у файлі a1.java
- f1 зберігається у файлі як a2.java
- f2 зберігається у файлі як a3.java
Компілятор скомпілює три файли та видасть 3 відповідні файли .class, який складається з коду BYTE. На відміну від С, зв’язування не проводиться .
Віртуальна машина Java або віртуальна машина Java знаходиться в оперативній пам'яті. Під час виконання, за допомогою завантажувача класів, файли класів переносяться в оперативну пам'ять. Код BYTE перевіряється на будь-які порушення безпеки.
Далі механізм виконання перетворить байт-код у власний машинний код. Це якраз вчасно складається. Це одна з головних причин, чому Java працює порівняно повільно.
ПРИМІТКА. Компілятор JIT або Just-in-time - це частина віртуальної машини Java (JVM). Він інтерпретує частину байтового коду, що має подібну функціональність одночасно.
Чому Java є інтерпретованою та компільованою мовою?
Мови програмування класифікуються як- Мова вищого рівня напр. C ++, Java
- Мови середнього рівня Напр. C.
- Мова низького рівня Ex Assembly
- нарешті, найнижчий рівень як Machine Machine.
Компілятор це програма , яка перетворює програму з одного рівня мови на іншу. Приклад перетворення програми C ++ у машинний код.
Java-компілятор перетворює високий рівень Java-коду в байт-код (який також є різновидом машинного коду).
Перекладач це програма , яка перетворює програму на одному рівні , на якій іншій мові програмування , на тому ж рівні. Приклад перетворення програми Java на C ++
У Java генератор Just In Time Code перетворює байт-код у власний машинний код, який знаходиться на однакових рівнях програмування.
Отже, Java є як компільованою, так і інтерпретованою мовою.
Чому Java працює повільно?
Дві основні причини повільності Java
- Динамічне зв’язування: На відміну від C, зв’язування здійснюється під час виконання кожного разу, коли програма запускається на Java.
- Інтерпретатор часу виконання: перетворення байт-коду в власний машинний код виконується під час виконання в Java, що додатково уповільнює швидкість
Однак остання версія Java значною мірою вирішила вузькі місця у роботі.
Короткий зміст :
- Повною формою JVM є віртуальна машина Java. JVM в Java - це двигун, який керує кодом Java. Він перетворює байт-код Java у мову машин.
- Архітектура JVM в Java містить завантажувач класів, область пам'яті, механізм виконання тощо.
- У JVM код Java компілюється в байт-код. Цей байт-код інтерпретується на різних машинах
- JIT означає компілятор Just-in-time. JIT є частиною віртуальної машини Java (JVM). Він використовується для прискорення часу виконання
- У порівнянні з іншими машинами компілятора, JVM в Java може виконувати повільно.