Какво е JVM?
Java Virtual Machine (JVM) е двигател, който осигурява среда за изпълнение за задвижване на Java кода или приложенията. Той преобразува байтовия код на Java в машинен език. JVM е част от Java Run Environment (JRE). В други езици за програмиране компилаторът създава машинен код за определена система. Java компилаторът обаче произвежда код за виртуална машина, известна като Java Virtual Machine.
Ето как работи JVM
Първо, Java кодът се съобразява с байт код. Този байт код се интерпретира на различни машини
Между хост системата и източника на Java, Bytecode е посреднически език.
JVM в Java е отговорен за разпределението на паметта.

В този урок за JVM ще научите -
- Архитектура на JVM
- Процес на компилиране и изпълнение на софтуерен код
- Процес на компилация и изпълнение на C код
- Процес на компилация и изпълнение на Java код
- Защо Java се интерпретира и компилира език?
- Защо Java е бавна?
Архитектура на JVM
Сега в този урок за JVM, нека разберем архитектурата на JVM. JVM архитектурата в Java съдържа loadloader, област на паметта, двигател за изпълнение и др.
1) ClassLoader
Зареждащият клас е подсистема, използвана за зареждане на файлове с класове. Той изпълнява три основни функции, а именно. Зареждане, свързване и инициализация.
2) Област на метода
JVM Method Area съхранява класови структури като метаданни, константния пул на изпълнение и кода за методите.
3) Купчина
Всички обекти, свързаните с тях променливи на екземпляра и масиви се съхраняват в купчината. Тази памет е обща и се споделя в множество нишки.
4) JVM езикови стекове
Java езиковите стекове съхраняват локални променливи и това са частични резултати. Всяка нишка има свой собствен JVM стек, създаден едновременно с създаването на нишката. Нов кадър се създава всеки път, когато се извика метод и се изтрива, когато процесът на извикване на метод приключи.
5) PC регистри
Регистърът на компютъра съхранява адреса на инструкцията за виртуална машина Java, която се изпълнява в момента. В Java всяка нишка има свой отделен регистър за компютър.
6) Нативни стекове от методи
Вътрешните стекове на методи съдържат инструкциите на родния код зависи от родната библиотека. Написано е на друг език, вместо на Java.
7) Двигател за изпълнение
Това е вид софтуер, използван за тестване на хардуер, софтуер или цялостни системи. Двигателят за изпълнение на теста никога не носи информация за тествания продукт.
8) Интерфейс на родния метод
Нативният интерфейс на метода е рамка за програмиране. Той позволява на Java код, който се изпълнява в JVM, да се обажда от библиотеки и собствени приложения.
9) Библиотеки на родния метод
Native Libraries е колекция от Native Libraries (C, C ++), които са необходими на Execution Engine.
Процес на компилиране и изпълнение на софтуерен код
За да напишете и изпълните софтуерна програма, имате нужда от следното
1) Редактор - За да въведете програмата си, за това може да се използва бележник
2) Компилатор - За да конвертирате вашата високоезична програма в роден машинен код
3) Linker - За да комбинирате заедно справка за различни програмни файлове в основната програма.
4) Loader - За да заредите файлове от вашето вторично устройство за съхранение като твърд диск, флаш устройство, CD в RAM за изпълнение. Зареждането се извършва автоматично, когато изпълнявате кода си.
5) Изпълнение - Действително изпълнение на кода, който се обработва от вашата операционна система и процесор.
С този фон прегледайте следващото видео и научете вътрешната работа на JVM и архитектурата на JVM (Java Virtual Machine).
Щракнете тук, ако видеоклипът не е достъпен
Процес на компилация и изпълнение на 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 Virtual Machine се намира в RAM. По време на изпълнението, като се използва зареждачът на класовете, файловете на класа се пренасят в RAM паметта. BYTE кодът се проверява за всякакви нарушения на сигурността.
След това механизмът за изпълнение ще преобразува байт кода в собствен машинен код. Това е точно навреме. Това е една от основните причини Java да е сравнително бавна.
ЗАБЕЛЕЖКА: JIT или Just-in-time compiler е част от Java Virtual Machine (JVM). Той интерпретира част от байт кода, която има подобна функционалност едновременно.
Защо Java е интерпретиран и компилиран език?
Езиците за програмиране са класифицирани като- Език от по-високо ниво C ++, Java
- Езици на средно ниво ° С
- Езиково събрание на ниско ниво
- накрая най-ниското ниво като машинен език.
А компилатор е програма, която конвертира програма от едно ниво на език на друг. Примерно преобразуване на програма C ++ в машинен код.
Java компилаторът преобразува java код на високо ниво в байт код (който също е вид машинен код).
Един преводач е програма, която превръща програма на едно ниво на друго език за програмиране на същото ниво. Примерно преобразуване на Java програма в C ++
В Java генераторът Just In Time Code преобразува байт кода в родния машинен код, които са на едни и същи програмни нива.
Следователно Java е както компилиран, така и интерпретиран език.
Защо Java е бавна?
Двете основни причини за бавността на Java са
- Динамично свързване: За разлика от C, свързването се извършва по време на изпълнение, всеки път, когато програмата се изпълнява в Java.
- Интерпретатор по време на изпълнение: Преобразуването на байт код в собствен машинен код се извършва по време на изпълнение в Java, което допълнително забавя скоростта
Най-новата версия на Java обаче е отстранила до голяма степен пречките при изпълнението.
Резюме :
- Пълната форма на JVM е Java Virtual Machine. JVM в Java е двигателят, който задвижва Java Code. Той преобразува байтовия код на Java в машинен език.
- JVM архитектурата в Java съдържа loadloader, област на паметта, двигател за изпълнение и др.
- В JVM Java кодът се компилира в байт код. Този байт код се интерпретира на различни машини
- JIT означава компилатор Just-in-time. JIT е част от Java Virtual Machine (JVM). Използва се за ускоряване на времето за изпълнение
- В сравнение с други компилаторни машини, JVM в Java може да бъде бавно при изпълнение.