Жава байткоди
Жава байткоди Байткоди манба кодини (ЖАВА дастурини) компиляция қилгандан кейин компилятор томонидан яратилган оралиқ код ҳисобланади. Ушбу оралиқ код Жавани платформадан мустақил(платформ индепендент) тилга айлантиради. |
Жава байткоди — жавада ёзилган кодни компиляция қилгандан кейин компилятор томонидан яратилган оралиқ код ҳисобланади. Ушбу оралиқ код Жавани платформадан мустақил(платформ индепендент) тилга айлантиради. Ва бу код жаваc компайлери ёрдамида ҳосил қилинади. „.жава“ файлидаги кодлар байткодга айлантирилганда, ушбу файл ичида нечта класс эълон қилинган бўлса шунча ўзида байткодларни сақловчи класс файллар компайлер томонидан генерация қилинади.
Байткоди қандай яратилади?
[edit | edit source]
Компилятор манба кодини ёки Жава дастурини байт кодига айлантиради ва кейин интерпрейтер тизимдаги байт кодини ишга туширади. Интерпрейтер ЖВМ (Жава Виртуал Мачине) деб ҳам аташ мумкин. Байт коди компилятор (уни яратувчи) ва интерпрейтер ўртасидаги умумий қисмдир. Қуйида келтирилган мисолда жараённи батафсил кўришимиз мумкин:[1]
class Main{
public static void main (String[] args) {
System.out.println("Main method!");
}
}
Юқоридаги келтирилган кодни ишга туширсак консолда „Маин метҳод“ деган ёзув чиқади.
- Юқорида ёзилган код Жава манба коди деб аталади
- Компилятор манба кодини компиляция қилади ва байткодга ўтказади
- Интерпретер компиляция қилинган манба кодини ишга туширади
Ҳар қандай дастур ёзганимизда, у машина кодида ёзилмайди. Биз уни Жава, C++, Пйтҳон ва бошқалар каби юқори даражадаги тилда ёзамиз. Лекин компютер фақат машина кодини тушунади. Шундай қилиб, биз дастуримизни ишга туширганимизда, у компилятор томонидан дастлаб машина кодига ёки байт кодига айлантирилади ва кейин Интерпретер томонидан код амалга оширилади.[2]
Жавага оид мақоладан
[edit | edit source]Жава дастурчиси умуман Жава байткодини билиши ёки тушуниши шарт эмас. Бироқ, ИБМ девелоперWоркс журналида таклиф қилинганидек, „Жава компилятори томонидан байткод ва қайси байткод яратилиши мумкинлигини тушуниш Жава дастурчисига ассемблй ҳақидаги билим C ёки C++ дастурчисига ёрдам берганидек ёрдам беради.“[3]
Жава байткоди афзалликлари
[edit | edit source]Жамес Гослинг жавани яратишни бошлаганининг асосий сабабларидан бири платформанинг мустақиллигига эришиш эди. Яъни ёзилган кодлар ҳар қандай дастурда ишлай олиши керак эди. Ва бу байткод орқали амалга оширилди. Демак, байткод ҳар қандай жава дастурининг жуда муҳим компонентидир. ЖВМ учун кўрсатмалар тўплами тизимдан тизимга фарқ қилиши мумкин, аммо ҳамма жвм байт кодини тушуна олади. Шуни ёдда тутиш керакки, байткодлар тўғридан-тўғри компутер томонидан ишга туширилмайдиган кодлар бўлиб, уларни ишга тушириш учун интерпрейтерларга таянади ва у ЖВМ ҳисобланади.
Байткод аслида Жава виртуал машинасида ишлайдиган машина даражасидаги тилдир. Ҳар сафар класс юкланганда, у класснинг ҳар бир методи учун байткод оқимини олади. Дастурни бажариш жараёнида ушбу метод ҳар сафар чақирилганда, бу метод учун байткод чақирилади. Жаваc нафақат дастурни компиляция қилади, балки дастур учун байт кодини ҳам яратади. Шундай қилиб, биз байткодни амалга ошириш Жавани платформадан мустақил тилга айлантиришини англадик. Бу Жавага C ёки C++ каби тилларда етишмаётган портативликни қўшишга ёрдам беради. Портативлик Жавани иш столлари, мобил қурилмалар, серверлар ва бошқа кўплаб платформаларда амалга оширишни таъминлайди. Буни қўллаб-қувватлаган Сун Миcросйстемс Жавани байткод талқинига мос равишда „бир марта ёзинг, исталган жойда ўқинг“ ёки „WОРА“ деб изоҳлади.[4]
Жава байткодига мисол
[edit | edit source]Қуйидаги жава кодига эътиборингизни қаратинг:
outer:
for (int i = 2; i < 1000; i++) {
for (int j = 2; j < i; j++) {
if (i % j == 0)
continue outer;
}
System.out.println (i);
}
Жава компилятори юқоридаги Жава кодини байткодга қуйидаги тарзда таржима қилиши мумкин, агар юқоридаги усулда қўйилган бўлса:
0: iconst_2
1: istore_1
2: iload_1
3: sipush 1000
6: if_icmpge 44
9: iconst_2
10: istore_2
11: iload_2
12: iload_1
13: if_icmpge 31
16: iload_1
17: iload_2
18: irem
19: ifne 25
22: goto 38
25: iinc 2, 1
28: goto 11
31: getstatic #84; // Field java/lang/System.out:Ljava/io/PrintStream;
34: iload_1
35: invokevirtual #85; // Method java/io/PrintStream.println:(I)V
38: iinc 1, 1
41: goto 2
44: return
Жава байткоди ва машина коди ўртасидаги асосий фарқ
[edit | edit source]Машина коди ва байткод ўртасидаги асосий фарқ шундаки, машина коди процессор томонидан бевосита бажарилиши мумкин бўлган машина тилида ёки иккилик кўрсатмалар тўпламидир.
Байткод эса тўғридан-тўғри ишга процессор тушириб бўлмайдиган компилятор томонидан яратиладиган ва ишга тушириш учун интерпрейтер керак бўлган код.
Яна қаранг
[edit | edit source]Манбалар
[edit | edit source]- ↑ „Жава байт коди ҳосил бо'лиш кетма-кетлиги“. https://www.geeksforgeeks.org/byte-code-in-java/. Қаралди: 23-май 2022-йил.
- ↑ „Байт коди ҳақида қисқача“. https://www.baeldung.com/java-class-view-bytecode. Қаралди: 23-май 2022-йил.
- ↑ Ундерстандинг бйтеcоде макес ёу а беттер программер
- ↑ „Жава байткоди афзалликлари“. https://www.javatpoint.com/java-bytecode. 2022-йил 26-июнда асл нусхадан архивланган. Қаралди: 23-май 2022-йил.
Ҳаволалар
[edit | edit source]- Ораcленинг Жава виртуал машинаси спецификацияси
- ИБМ нинг жавага оид фойдали мақолалари
- ГеэксФорГеэкс платформасининг байткодга оид манбаси
- Жаватпоинт сайтидан фойдали ва тушунарли жава байткод бўйича мақола (Wайбаcк Мачине сайтида 2022-06-26 санасида архивланган)
- Класс ичидаги жава байткод мақоласи
- Ҳиндистонлик дастурчилар томонидан Эдурека платформасига жойланган байткод ҳақида мақола