Јава виртуелна машина (ЈВМ) је основна компонента Јава Рунтиме Енвиронмент (ЈРЕ) која омогућава Јава програмима да раде на било којој платформи без модификација. ЈВМ делује као тумач између Јава бајткода и основног хардвера који пружа чувену Јава-ину Врите Онце Рун Анивхере (ВОРА) могућност.
- Јава извор (.јава) -> компајлирао јавац -> бајт код (.цласс)
- ЈВМ учитава бајткод, потврђује да га повезује и затим га извршава
- Извршење може да укључује тумачење бајткода или коришћење Јуст-Ин-Тиме (ЈИТ) компилације за претварање врућег кода у изворни машински код ради перформанси
- Сакупљање смећа ради у позадини да поврати меморију од неискоришћених објеката
Архитектура ЈВМ
Слика испод показује архитектуру и кључне компоненте ЈВМ-а.
Компоненте ЈВМ архитектуре
Сада ћемо детаљно разговарати о свакој компоненти ЈВМ-а.
1. Подсистем утоваривача класа
Углавном је одговоран за три активности.
1. Лоадинг
- Чита .цласс датотеке и складишти метаподатке класе у области метода.
- Креира објекат Цласс у хрпи који представља учитану класу.
class GFG{ static{ System.out.println('GFG class is loaded by the JVM!'); } public void display(){ System.out.println('Method of GFG class is executed.'); } } public class Test{ public static void main(String[] args) throws Exception{ System.out.println('Main method started.'); // Loading the class explicitly using Class.forName() Class.forName('GFG'); System.out.println('Class loaded successfully.'); // Creating object to execute method GFG obj = new GFG(); obj.display(); } }
Излаз
Main method started. GFG class is loaded by the JVM! Class loaded successfully. Method of GFG class is executed.
Напомена: За сваку напуњену .цласс само фајл један креиран је објекат класе.
2. Повезивање: Одговоран за припрему учитане класе за извршење. Укључује три корака:
- Верификација: Осигурава да бајт код прати ЈВМ правила и да је безбедан за извршавање.
- Припрема: Додељује меморију за статичке променљиве и додељује подразумеване вредности.
- Резолуција: Претвара симболичке референце у директне референце у меморији.
3. Иницијализација
- Додељује стварне вредности статичним променљивим.
- Извршава статичке блокове дефинисане у класи.
Типови утоваривача класа
- Боотстрап Цласс Лоадер: Учитава основне Јава класе (ЈАВА_ХОМЕ/либ).
- Учитавач класе екстензије: Учитава класе из директоријума екстензија (ЈАВА_ХОМЕ/јре/либ/ект).
- Учитавач класе система/апликације: Учитава класе из путање класе апликације.
// Java code to demonstrate Class Loader subsystem public class Geeks { public static void main(String[] args) { // String class is loaded by bootstrap loader and // bootstrap loader is not Java object hence null System.out.println(String.class.getClassLoader()); // Test class is loaded by Application loader System.out.println(Geeks.class.getClassLoader()); } }
Излаз
null jdk.internal.loader.ClassLoaders$AppClassLoader@8bcc55f
2. ЈВМ меморијске области
- Област методе: Чува информације на нивоу класе као што су име класе, променљиве метода родитељске класе и статички подаци. Дељено преко ЈВМ-а.
- Подручје гомиле: Чува све објекте. Дељено преко ЈВМ-а.
- Подручје стека: Свака нит има сопствени стек времена извршавања; складишти локалне променљиве позива метода у оквирима стека. Уништено када се нит заврши.
- ПЦ регистри: Задржите адресу инструкције која се тренутно извршава за сваку нит.
- Нативе Метход Стацкс: Свака нит има посебан стек за извршавање матичне методе.
3. Машина за извршење
Извршни механизам извршава .класу (бајткод). Чита бајт код ред по ред користи податке и информације присутне у различитим меморијским подручјима и извршава инструкције. Може се класификовати у три дела:
нгинк
- тумач: Он тумачи бајткод ред по ред и затим га извршава. Недостатак је у томе што се један метод позива више пута сваки пут када је потребна интерпретација.
- Правовремени компајлер (ЈИТ): Користи се за повећање ефикасности преводиоца. Он компајлира цео бајт код и мења га у изворни код, тако да кад год тумач види поновљене позиве метода, ЈИТ обезбеђује директан изворни код за тај део тако да није потребна поновна интерпретација, чиме се побољшава ефикасност.
- Сакупљач смећа: Уништава нереференциране објекте. За више информација о сакупљачу смећа погледајте Гарбаге Цоллецтор .
4. Јава изворни интерфејс (ЈНИ)
То је интерфејс који је у интеракцији са библиотекама природних метода и обезбеђује изворне библиотеке (Ц Ц++) потребне за извршење. Омогућава ЈВМ-у да позива Ц/Ц++ библиотеке и да их позивају Ц/Ц++ библиотеке које могу бити специфичне за хардвер.
5. Библиотеке матичних метода
Ово су колекције изворних библиотека потребних за извршавање природних метода. Они укључују библиотеке написане на језицима као што су Ц и Ц++.