Какво е JVM? Java Виртуална машина Archiтекстура
В какво е JVM Java?
Java Виртуална машина (JVM) е двигател, който осигурява среда за изпълнение за управление на Java Код или приложения. Преобразува Java байт код в машинен език. JVM е част от Java Среда за изпълнение (JRE). В други езици за програмиране компилаторът произвежда машинен код за определена система. обаче Java компилаторът произвежда код за виртуална машина, известна като Java Виртуална машина.
Как работи JVM?
Първо, Java кодът се компилира в байт код. Този байт код се интерпретира на различни машини. Между хост системата и Java източник, Байткодът е междинен език. JVM в Java е отговорен за разпределянето на паметта.
В този JVM урок ще научите-
Archiструктура на JVM (Java виртуална машина)
Сега в този JVM урок, нека разберем Archiструктура на JVM. JVM архитектура в Java съдържа програма за зареждане на класове, област на паметта, механизъм за изпълнение и т.н.
1) ClassLoader
Зареждането на класове е подсистема, използвана за зареждане на файлове на класове. Той изпълнява три основни функции, т.е. Зареждане, свързване и инициализация.
2) Област на метода
JVM Method Area съхранява структури от класове като метаданни, постоянен пул за изпълнение и код за методи.
3) Купчина
Всички Заведения, техните свързани променливи на екземпляри и масиви се съхраняват в купчината. Тази памет е обща и се споделя между множество нишки.
4) Езикови стекове на JVM
Java езикови стекове съхраняват локални променливи и това са частични резултати. Всяка нишка има свой собствен JVM стек, създаден едновременно със създаването на нишката. Нов кадър се създава при всяко извикване на метод и се изтрива, когато процесът на извикване на метода приключи.
5) PC регистри
PC регистър съхранява адреса на Java инструкция за виртуална машина, която се изпълнява в момента. в Java, всяка нишка има свой отделен компютърен регистър.
6) Нативни стекове от методи
Стековете на естествените методи съдържат инструкциите на собствения код, зависещ от собствената библиотека. Написано е на друг език вместо Java.
7) Двигател за изпълнение
Това е вид софтуер, използван за тестване на хардуер, софтуер или цели системи. Механизмът за изпълнение на теста никога не носи информация за тествания продукт.
8) Интерфейс на родния метод
Интерфейсът на Native Method е програмна рамка. Позволява Java код, който се изпълнява в JVM за извикване от библиотеки и родни приложения.
9) Библиотеки за собствени методи
Native Libraries е колекция от Native Libraries(C, C++), които са необходими на Изпълнителната машина.
Процес на компилиране и изпълнение на софтуерен код
За да напишете и изпълните софтуерна програма, имате нужда от следното
1) Редактор – За да въведете програмата си, може да се използва бележник
2) съставител – За да конвертирате вашата високоезична програма в собствен машинен код
3) Линкер – За да комбинирате различни препратки към програмни файлове във вашата основна програма заедно.
4) Товарач – За да заредите файловете от вашето вторично устройство за съхранение като твърд диск, флаш устройство, компактдиск в RAM за изпълнение. Зареждането се извършва автоматично, когато изпълните кода си.
5) Изпълнение – Действително изпълнение на кода, който се обработва от вашата операционна система и процесор.
С този фон вижте следния видеоклип и научете вътрешната работа и архитектурата на JVM на JVM (Java Виртуална машина).
Кликнете тук ако видеото не е достъпно
Процес на компилиране и изпълнение на C код
За да разберем Java процес на компилиране в Java. Нека първо да разгледаме набързо процеса на компилиране и свързване в C.
Да предположим, че основно сте извикали две функции f1 и f2. Основната функция се съхранява във файл a1.c.
Функцията f1 се съхранява във файл a2.c
Функцията f2 се съхранява във файл a3.c
Всички тези файлове, т.е. a1.c, a2.c и a3.c, се подават на компилатора. Чийто изход са съответните обектни файлове, които са машинният код.
Следващата стъпка е интегрирането на всички тези обектни файлове в един .exe файл с помощта на линкер. Линкерът ще обедини всички тези файлове и ще създаде .exe файла.
По време на изпълнение на програмата, програма за зареждане ще зареди a.exe в RAM за изпълнението.
Java компилиране и изпълнение на код в Java VM
Сега в този JVM урок, нека разгледаме процеса за JAVA. Във вашия основен имате два метода f1 и f2.
- Основният метод се съхранява във файл a1.java
- f1 се съхранява във файл като a2.java
- f2 се съхранява във файл като a3.java
Компилаторът ще компилира трите файла и ще създаде 3 съответни .class файла, които се състоят от BYTE код. За разлика от C, не се прави свързване.
- Java VM или Java Виртуалната машина се намира в RAM. По време на изпълнение, използвайки инструмента за зареждане на класове, файловете на класа се пренасят в RAM. BYTE кодът се проверява за всякакви пробиви в сигурността.
След това механизмът за изпълнение ще преобразува байт кода в собствен машинен код. Това е точно навреме за компилиране. Това е една от основните причини Java е сравнително бавен.
ЗАБЕЛЕЖКА: JIT или Компилаторът точно навреме е част от Java Виртуална машина (JVM). Той интерпретира част от байтовия код, който има подобна функционалност едновременно.
Защо е Java както интерпретиран, така и компилиран език?
Програмни езици са класифицирани като
- Език от по-високо ниво Пр. C++, Java
- Езици на средно ниво Пр. В
- Език на ниско ниво Пр Assembly
- накрая най-ниското ниво като машинния език.
A компилатор е програма, която преобразува програма от едно ниво на език на друго. Примерно преобразуване на C++ програма в машинен код. Java компилаторът преобразува Java код от високо ниво в байт код (който също е вид машинен код).
An преводач е програма, която преобразува програма на едно ниво в друг език за програмиране на същото ниво. Примерно преобразуване на Java програма в C++
In Java, генераторът на Just In Time Code преобразува байт кода в оригиналния машинен код, който е на същите нива на програмиране.
Следователно, Java е както компилиран, така и интерпретиран език.
Защо е Java бавен?
Двете основни причини за бавността на Java сте
- Динамично свързване: За разлика от C, свързването се извършва по време на изпълнение, всеки път, когато програмата се стартира Java.
- Интерпретатор по време на изпълнение: Преобразуването на байт код в собствен машинен код се извършва по време на изпълнение в Java което допълнително забавя скоростта
Въпреки това най-новата версия на Java се обърна до голяма степен към тесните места в производителността.
Oбобщение:
- Пълната форма на JVM е Java Виртуална машина. JVM в Java е двигателят, който задвижва Java Код. Преобразува Java байт код в машинен език.
- JVM архитектура в Java съдържа програма за зареждане на класове, област на паметта, механизъм за изпълнение и т.н.
- В JVM, Java кодът се компилира в байт код. Този байт код се интерпретира на различни машини
- JIT означава компилатор точно навреме. JIT е част от Java Виртуална машина (JVM). Използва се за ускоряване на времето за изпълнение
- В сравнение с други компилиращи машини, JVM в Java може да се изпълнява бавно.









