logo

Како ЈВМ ради - ЈВМ архитектура

Јава виртуелна машина (ЈВМ) је основна компонента Јава Рунтиме Енвиронмент (ЈРЕ) која омогућава Јава програмима да раде на било којој платформи без модификација. ЈВМ делује као тумач између Јава бајткода и основног хардвера који пружа чувену Јава-ину Врите Онце Рун Анивхере (ВОРА) могућност.

  • Јава извор (.јава) -> компајлирао јавац -> бајт код (.цласс)
  • ЈВМ учитава бајткод, потврђује да га повезује и затим га извршава
  • Извршење може да укључује тумачење бајткода или коришћење Јуст-Ин-Тиме (ЈИТ) компилације за претварање врућег кода у изворни машински код ради перформанси
  • Сакупљање смећа ради у позадини да поврати меморију од неискоришћених објеката

Архитектура ЈВМ

Слика испод показује архитектуру и кључне компоненте ЈВМ-а.

Јвм' title=

Компоненте ЈВМ архитектуре

Сада ћемо детаљно разговарати о свакој компоненти ЈВМ-а.



1. Подсистем утоваривача класа

Углавном је одговоран за три активности. 

цласс_лоадер_субсистем' loading='lazy' title=

1. Лоадинг

  • Чита .цласс датотеке и складишти метаподатке класе у области метода.
  • Креира објекат Цласс у хрпи који представља учитану класу.
Java
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
// 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. Библиотеке матичних метода

Ово су колекције изворних библиотека потребних за извршавање природних метода. Они укључују библиотеке написане на језицима као што су Ц и Ц++.