Jump to content

Жава Виртуал Мачине

From Vikipediya
ЖВМ(Жава виртуал машинаси)
Жава дастурлаш тилида ёзилган кодларни ишга тушириш учун қо'лланиладиган виртуал машина

ЖВМ — Жава экотизимининг ядроси бўлиб, Жавага асосланган дастурий таъминотларга "бир марта ёзинг, исталган жойда ишга туширинг" ёндашувига амал қилиш имконини беради. Жава кодини битта машинада ёзишингиз ва уни ЖВМ ёрдамида исталган бошқа машинада ишга туширишингиз мумкин. ЖВМ дастлаб фақат Жавани қўллаб-қувватлаш учун ишлаб чиқилган эди. Бироқ, вақт ўтиши билан Жава платформасида Сcала, Котлин ва Гроовй каби кўплаб бошқа тилларни ҳам ишга тушириш имкони туғилди. Бу тилларнинг барчаси биргаликда ЖВМ тиллари деб номланади.[1]

Жава виртуал машинаси нима?

[edit | edit source]

C ва C++ каби дастурлаш тилларида код дастлаб платформага хос машина кодига компиляция қилинади. Бу тиллар компиляция қилинган ёки компилятер тиллар деб аталади. Бошқа томондан, ЖаваСcрипт ва Пйтҳон каби тилларда компютер кўрсатмаларни компиляция қилмасдан тўғридан-тўғри бажаради. Бу тиллар изоҳли ёки интерпретер тиллар деб аталади. Жава иккала техниканинг комбинациясидан фойдаланади. Жава коди класс файлини яратиш учун аввал махсус жава байт кодга компиляция қилинади. Кейинчалик бу класс файли асосий платформа учун Жава виртуал машинаси томонидан ишга туширилади. Худди шу класс файл ҳар қандай платформа ва операцион тизимда ишлайдиган ЖВМ нинг исталган версиясида ишга туширилиши мумкин. Виртуал машиналарга ўхшаб, ЖВМ ҳост машинасида яъни ЖВМ ўрнатилган машинада ўзи учун алоҳида жой яратади. Бу майдон платформа ёки машинанинг операцион тизимидан қатъи назар, Жава дастурларини ишга тушириш учун ишлатилиши мумкин.

Жава виртуал машинаси архитектураси

[edit | edit source]

ЖВМ учта алоҳида компонентдан иборат:

  • классларни юкловчи қисм яни класслоадерлар(инглиз тилида cласслоадерс деб аталади)
  • амалга ошириш жараёнидаги маълумотларни сақловчи хотира қисм (инглиз тилида рунтиме меморй ареас дейилади)
  • амалларни бажарувчи қисм(инглиз тилида эхеcутион энгине дейилади)

Классларни хотирага юкловчилар (cласслоадерс)

[edit | edit source]

Класслоадерларнинг асосий вазифа программадаги классларни жава виртуал машинаси томонидан ишлатилиниши керак бўлган вақтда хотирага юклашдан иборат. Жавада бир нечта класс турлари мавжуд. Масалан жава дастурлаш тилида олдиндан яратилган класслар ёки ташқи кутубхоналардан чақирилган класслар ва дастурчи томонидан яратилган класслар каби класс турлари мавжуд. Шу жиҳатдан ЖВМ да 3 хил класслоадерлар мавжуд. Булар қуйидагича:

  • Бооцтрап класслоадерлар
  • Эхтенсион класслоадерлар
  • Система класслоадерлари

Бооцтрап класслоадерлар — бу класслоадерлар жава дастурлаш тилида олдиндан яратилган ёки бўлмасам компютер хотирасида ЖАВА/ЖРЕ/ЛИБ йўлида жойлашган класс файлларни юклаш учун ишлатилинади. Бу класслоадер барча класслаодерларнинг отаси ҳисобланади.

Эхтенсион класслоадер — бу класслоадер ташқаридан юкланган экстентионлар яъни кутубхоналардаги классларни юклайди. Бу класслоадер ЖАВА/ЖРЕ/ЛИБ/ЭХТ йўлидаги классларни хотирага юклайди.

Апплиcатион класслоадер(система класслоадери) — бу класслоадер дастурчи томонидан яратилган ёки cласспатҳ йўлидаги классларни юклаш учун ишлатилинади.[2]

Классларни юкловчиларнинг учта асосий вазифаси, класснинг юкланиш босқичлари

[edit | edit source]

Класслоадерларнинг асосий учта вазифаси бор, булар:

  • Классларни юклаш(Лоадинг)
  • Боғлаш(Линкинг)
  • Инитиализация(Ишга тушириш)


Биринчи қадамда cласслоадер „.cласс“ кенгайтмали файлни ўқийди ва унга мос иккилик маълумот ишлаб чиқиб уни метҳод ареа деб номланган хотирага сақлайди. Ҳар бир класс файл учун ЖВМ қуйидаги маълумотларни хотирага сақлайди:

  • Юкланган класс файлнинг тўлиқ номи ва унинг ота класси номи
  • Класс файлнинг тури, у классми, интерфейсми ёки энум туридаги файлми, шу ҳақидаги маълумот
  • Класс файлда жойлашган ўзгарувчилар, методлар ва шунга ўхшаш маълумот


Класс файл юклангандан сўнг, ЖВМ ҳеап меморй деб аталувчи хотирада Cласс типидаги бу класс ҳақидаги маълумотларни кўрсатиб туриш учун обект яратади. Бу класс обекти дастурчи томонидан класс ҳақидаги маълумотар, масалан, номи, методлари ва бошқаларни олиш учун ишлатилинади.
Иккинчи қадам боғлаш деб номланади ва бунда .cласс файлни яроқли компилятор томонидан компиляция қилинганлиги текширилади. Агар қандайдир хатолик бўлса верификацияда хатолик деб аталувчи верифиcатионехcептион хатолигини ташлайди. Бундан ташқари класс файлдаги статик ўзгарувчиларни дастлабки(дефаулт) қийматлари берилади. Шу билан бирга, симболлар орқали боғланишларни бевосита боғланишларга алмаштирилади. Масалан, класс номининг ўрнига хотирада жойлашган номи ишлатилинади.
Учинчи қадамда эса ишга тушириш жараёни бўлади яъни кодда берилган статик ўзгарувчиларни қиймати белгиланади ва класс ичидаги статик блок ичида ёзилган код ишга туширилади. [3]

Классларнинг юкланиш механизми

[edit | edit source]
жава cласслоадер мечанисм
жава cласслоадер мечанисм

Жавада класс махсус „Делегатион-Ҳиэрарчй“ принсипига амал қилган ҳолда юкланади. Қачонки, жвм дастур ишлаш жараёнида бирон бир классга дуч келса, аввало, хотирадан бу класс юкланган ёки йўқлигини текширади. Агар юкланган бўлса фойдаланади, акс ҳолда, класслоадерларга мурожаат қилади, сўров биринчи навбатда апплиcатион класслоадерга келади, бу класслоадер сўровни эхтенсион класслоадерга жўнатади, эхтенсион класслоадер эса бооцтрап класслоадерга юборади. Бооцтрап класслоадер ўзи мас’ул бўлган папкани қарайди, агар классни топса, уни юқорида кўрсатилган тартибда юклайди, акс ҳолда, сўров яна эхтенсион класслоадерга келади, у ҳам ўзи мас’ул бўлган папкалар орасидан класс файлни қидиради, агар файл топилса юкланади, акс ҳолда, апплиcатион класслоадерга сўров жўнатилади, агар бу класслоадер ҳам класс файлни топа олмаса, ЖВМ томонидан cлассНотФоундехcептион деб аталувчи хатолик қайтарилади.[4]

Амалларни бажарувчи компонента(Эхеcутион энгине)

[edit | edit source]

Амалларни бажарувчи компонента ҳам ўз навбатида учта қисмга бўлинади, булар:

  • Интерпретатор
  • ЖИТ (Жуст ин тиме — инглизча, айни вақтда) компилятор
  • Гарбаге cоллеcтор (хотира тозаловчи)

Интерпретатор — хотирага юкланган классдаги байт кодларни қаторма-қатор ўқийди ва кодни ишга туширади. Буни асосий камчилиги, кодларни ҳар сафар қайта ва қайта компиляция қилинишидадир.
ЖИТ компилятор — бунинг асосий вазифаси жвмда иш жараёнини тезлаштириш ва оптимизация қилиш ҳисобланади. ЖИТ нинг устунлик берувчи тарафи бу агар байт код олдин компиляция қилинган бўлса, қайтадан қилмасдан ўша компиляция қилинган кодни ишга туширади ва бу амаллар бажарилиш жараёни сезиларли даражада тезлашишига сабаб бўлади.[5]
Гарбаге cоллеcтор — бу хотирани оптимизация қилишга ёрдам беради, яъни хотирадаги қиймат йўқ бўлин қолган(„нулл“ бўлган) ёки бошқа обектлар билан боғланиши йўқолган обектларни ҳеап хотирасидан тозалаб туради. Бу эса хотира тўлиб қолишини олдини олади. Баъзи C, Фортан, Пасcал каби тилларда бу жараён дастурчилар томонидан қўлда амалга оширилади. Шунинг учун, автоматик хотира тозаланиши жаванинг бошқа тиллардан устунлик қиладиган муҳим жиҳатларидан биридир.[6]

Манбалар

[edit | edit source]

Ҳаволалар

[edit | edit source]