Kontent qismiga oʻtish

Java baytkodi

Vikipediya, ochiq ensiklopediya
Java baytkodi
Baytkodi manba kodini (JAVA dasturini) kompilyatsiya qilgandan keyin kompilyator tomonidan yaratilgan oraliq kod hisoblanadi. Ushbu oraliq kod Javani platformadan mustaqil(platform independent) tilga aylantiradi.

Java baytkodi — javada yozilgan kodni kompilyatsiya qilgandan keyin kompilyator tomonidan yaratilgan oraliq kod hisoblanadi. Ushbu oraliq kod Javani platformadan mustaqil(platform independent) tilga aylantiradi. Va bu kod javac kompayleri yordamida hosil qilinadi. „.java“ faylidagi kodlar baytkodga aylantirilganda, ushbu fayl ichida nechta klass eʼlon qilingan boʻlsa shuncha oʻzida baytkodlarni saqlovchi klass fayllar kompayler tomonidan generatsiya qilinadi.

Baytkodi qanday yaratiladi?

[tahrir | manbasini tahrirlash]
byte code

Kompilyator manba kodini yoki Java dasturini bayt kodiga aylantiradi va keyin interpreyter tizimdagi bayt kodini ishga tushiradi. Interpreyter JVM (Java Virtual Machine) deb ham atash mumkin. Bayt kodi kompilyator (uni yaratuvchi) va interpreyter oʻrtasidagi umumiy qismdir. Quyida keltirilgan misolda jarayonni batafsil koʻrishimiz mumkin:[1]

      class Main{
         public static void main (String[] args) {
            System.out.println("Main method!");
         }
      }

Yuqoridagi keltirilgan kodni ishga tushirsak konsolda „Main method“ degan yozuv chiqadi.

  • Yuqorida yozilgan kod Java manba kodi deb ataladi
  • Kompilyator manba kodini kompilyatsiya qiladi va baytkodga oʻtkazadi
  • Interpreter kompilyatsiya qilingan manba kodini ishga tushiradi

Har qanday dastur yozganimizda, u mashina kodida yozilmaydi. Biz uni Java, C++, Python va boshqalar kabi yuqori darajadagi tilda yozamiz. Lekin kompyuter faqat mashina kodini tushunadi. Shunday qilib, biz dasturimizni ishga tushirganimizda, u kompilyator tomonidan dastlab mashina kodiga yoki bayt kodiga aylantiriladi va keyin Interpreter tomonidan kod amalga oshiriladi.[2]

Java dasturchisi umuman Java baytkodini bilishi yoki tushunishi shart emas. Biroq, IBM developerWorks jurnalida taklif qilinganidek, „Java kompilyatori tomonidan baytkod va qaysi baytkod yaratilishi mumkinligini tushunish Java dasturchisiga assembly haqidagi bilim C yoki C++ dasturchisiga yordam berganidek yordam beradi.“[3]

Java baytkodi afzalliklari

[tahrir | manbasini tahrirlash]

James Gosling javani yaratishni boshlaganining asosiy sabablaridan biri platformaning mustaqilligiga erishish edi. Yaʼni yozilgan kodlar har qanday dasturda ishlay olishi kerak edi. Va bu baytkod orqali amalga oshirildi. Demak, baytkod har qanday java dasturining juda muhim komponentidir. JVM uchun koʻrsatmalar toʻplami tizimdan tizimga farq qilishi mumkin, ammo hamma jvm bayt kodini tushuna oladi. Shuni yodda tutish kerakki, baytkodlar toʻgʻridan-toʻgʻri komputer tomonidan ishga tushirilmaydigan kodlar boʻlib, ularni ishga tushirish uchun interpreyterlarga tayanadi va u JVM hisoblanadi.

Baytkod aslida Java virtual mashinasida ishlaydigan mashina darajasidagi tildir. Har safar klass yuklanganda, u klassning har bir metodi uchun baytkod oqimini oladi. Dasturni bajarish jarayonida ushbu metod har safar chaqirilganda, bu metod uchun baytkod chaqiriladi. Javac nafaqat dasturni kompilyatsiya qiladi, balki dastur uchun bayt kodini ham yaratadi. Shunday qilib, biz baytkodni amalga oshirish Javani platformadan mustaqil tilga aylantirishini angladik. Bu Javaga C yoki C++ kabi tillarda yetishmayotgan portativlikni qoʻshishga yordam beradi. Portativlik Javani ish stollari, mobil qurilmalar, serverlar va boshqa koʻplab platformalarda amalga oshirishni taʼminlaydi. Buni qoʻllab-quvvatlagan Sun Microsystems Javani baytkod talqiniga mos ravishda „bir marta yozing, istalgan joyda oʻqing“ yoki „WORA“ deb izohladi.[4]

Java baytkodiga misol

[tahrir | manbasini tahrirlash]

Quyidagi java kodiga eʼtiboringizni qarating:

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);
}

Java kompilyatori yuqoridagi Java kodini baytkodga quyidagi tarzda tarjima qilishi mumkin, agar yuqoridagi usulda qoʻyilgan boʻlsa:

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

Java baytkodi va mashina kodi oʻrtasidagi asosiy farq

[tahrir | manbasini tahrirlash]

Mashina kodi va baytkod oʻrtasidagi asosiy farq shundaki, mashina kodi protsessor tomonidan bevosita bajarilishi mumkin boʻlgan mashina tilida yoki ikkilik koʻrsatmalar toʻplamidir.
Baytkod esa toʻgʻridan-toʻgʻri ishga protsessor tushirib boʻlmaydigan kompilyator tomonidan yaratiladigan va ishga tushirish uchun interpreyter kerak boʻlgan kod.