Увод у Јава виртуелну машину
У овом чланку ћемо сазнати о Јава виртуелној машини, званој ЈВМ. Јава Виртуал Мацхине је виртуелна машина која омогућава рачунарском систему покретање / извршавање Јава програма. У основи, ЈВМ је мотор, који ради као окружење током Јава Јава кода. ЈВМ претвара јава код у машински језик. Када покренете компајлирану датотеку .цласс, она прелази у ЈВМ и тада ЈВМ враћа излаз. Јава виртуелна машина део је ЈРЕ-а, што је скраћеница за „Јава Рунтиме Енвиронмент“. Основни задаци Јава виртуелне машине састоје се од учитавања кода, затим верификације кода и извршења кода. Такође, обезбедите окружење за извршавање кода. ЈВМ се састоји од различитих компоненти попут Цласслоадер-а, листе простора додељене од ЈВМ-а као што су Стацк, Екецутион Енгине и неколико матичних библиотека.
Архитектура Јава виртуелне машине 
Као што је приказано на горњој слици, Јава Виртуал Мацхине Арцхитецтуре састоји се од различитих компоненти. Научимо о свакој конкретној компоненти појединачно.
Утоваривач
Као што име говори, то је компонента одговорна за учитавање датотека Класа. Учитавање, повезивање и иницијализација датотеке класе главне су функције утоваривача. Утоваривач то ради за време извођења.
- Учитавање: У основи, утоваривач чита датотеку .цласс, затим генерише бинарни код и спрема га у подручје методе. Боотстрап Цласслоадер, Ектенсион Цласслоадер и Апплицатион Цласслоадер су различити ЦлассЛоадерс одговорни за учитавање различитих класа.
- Повезивање: Три главне функције као што су верификација, припрема и решавање. Све започиње верификацијом датотеке .цласс. Ако провјера не успије, даје изузетак провјере времена извођења. Касније се меморија додељује променљивим са подразумеваним вредностима. Тада се, коначно, симболичке меморијске референце замењују директним референцама из подручја меморије.
- Иницијализација: Ово је завршни део ЦлассЛоадер-а. Оригиналне вредности су додељене свим статичким променљивим, а затим извршавање статичког блока. Овај део се изводи од врха до дна класе.
Гомила
Овдје се чувају детаљи о варијаблама објекта и инстанци. То је заједничко меморијско подручје, што значи да овде сачувани подаци нису безбедни за нити.
Изузетак у теми „главни“ јава.ланг.ОутОфМемориЕррор: Јава хеап спаце
Једна од најрелевантнијих грешака је изузетак „ОутОфМемориЕррор “, што значи да ЈВМ не може доделити објект у подручју Хеап или се додељивање меморије не може извршити за исти објект.
Гомила
Овде се ствара посебан низ рунтимеа за сваку нову нит. Такође познат као, Рун-Тиме Стацк, сваки пут када се позива метода, сви детаљи се чувају у одговарајућем сталку извођења, а након довршетка методе, ови детаљи се уклањају из скупа.
ПЦ Регистри
За сваки појединачни низ креира се засебни регистар рачунара (програмски бројач) који чува адресу тренутног упутства за извршавање, која ће се касније ажурирати следећом упутством. Ово меморијско подручје је прилично мало и фиксне је величине.
Нативе Метход Стацк
То је једна од властитих врста меморије која се позива на нит, а затим се нит налази на потпуно новом нивоу где структура и сигурносна ограничења која подразумева Јава Виртуал Мацхине више нису у употреби. У поређењу са осталим областима меморије за време извођења, меморија заузета матичним сноповима метода нема фиксну величину, без повећања или смањења.
Јава Нативе Интерфаце
ЈНИ једноставно комуницира са доле наведеним Библиотекама изворних метода који се примењују на Ц, Ц ++ и пружају исти механизму извршења. ЈНИ дозвољава директан приступ шифри монтаже. За ЈВМ, Јава и Нативе су две врсте кодова. ЈНИ глатко успоставља добро дефинисану везу између ово двоје.
Библиотеке изворне методе
Збирка завичајних библиотека према захтевима извршног мотора.
Екецутион Енгине
Ето, сада имамо јава програм у бајт коду који се додељује горе објашњеним областима података путем учитавача класе, а сада ће бајт код извршити покретач. Екецутион Енгине једноставно чита бајт код у јединицама, попут машине за читање линија кодова, једну по једну. Бајт код је људски читљив формат, због чега га машина не може прочитати јер га има и треба га претворити у машински читљив формат, где се доле наведене компоненте користе за тумачење.
Екецутион Енгине има три главне компоненте, а то су Интерпретер, ЈИТ Цомпилер и Гарбаге Цоллецтор.
1. Преводилац
Једноставно, извршава бајт код на секвенцијални метод. Позив се врши упитом наредбеног ретка са компајлираном датотеком као аргументом. Интерпретер је прилично брз у интерпретацији и извршавању наредби једна за другом, што се дешава брже од ЈИТ преводиоца за састављање кода.
име класе јава
Маин () класа мора бити у састављеној датотеци .цласс.
2. ЈИТ Цомпилер
Једна од најважнијих компоненти Јава Рунтиме окружења, која побољшава перформансе Јава апликације у току рада. Ниједна друга компонента нема већи утицај на перформансе од ЈИТ Цомпилера. Ово је подразумевани преводилац и активира се када се позове било који Јава метод.
3. Сакупљач смећа
Као што име сугерира, то има неке везе са смећем, Гарбаге Цоллецтор једноставно претражује сваки могући објект који је доступан у ЈВМ хеап простору, провјерава да ли се користи, а затим брише неискориштени. Дакле, то једноставно обележава делове меморије који се користе или не користе. Затим се наставља брисање, где се једноставно уклања обележени предмет. Најбољи је случај да није потребан систем за ручну доделу меморије јер Гарбаге Цоллецтор обавља посао уклањања неискориштеног меморијског простора аутоматски. Али, будући да је ово аутоматски задатак, ниједан програмер нема контролу над заказивањем било ког временског терминала за одређени задатак чишћења и захтева више снаге ЦПУ-а док тражи референце објеката.
Закључак
Иако није обавезно имати јасно разумевање како ЈВМ ради, у сврху писања Јава кода, то је неизмерно корисно. За програмере који разуме рад ЈВМ-а написат ће бољи и оптимизованији код, колико год да је захтев дуг или сложен. Поред овде наведеног описа, ЈВМ пружа широк спектар функција и технологија. Ове функције се могу користити за побољшање перформанси према потреби одређеног добављача
Препоручени чланци
Ово је водич за Јава виртуелну машину. Овде смо расправљали о архитектури јава виртуелне машине заједно са њеним различитим компонентама. Такође можете погледати следеће чланке да бисте сазнали више -
- Буббле Сорт ин ЈаваСцрипт
- Животни циклус теме на Јави
- Шта је Јава СЕ?
- Најбољи Јава компајлери
- ЈРЕ вс ЈВМ | Топ 8 разлика са (Инфограпхицс)