CodeBlanks Logo Icon CodeBlanks

Bytecode

Bytecode ve javap ile komut incelemeyi öğrenirsin.

Bayt kodu

Bayt kodu (bytecode), javac tarafından üretilen ve JVM tarafından çalıştırılan ara dildir. Her .class dosyası bayt kodu talimatlarını içerir; bunlar yığın tabanlı bir makine için yazılmıştır.

Örnek bir metot:int add(int a, int b) { return a + b; }. Bu, iload, iadd, ireturn gibi talimatlara derlenir. javap -c Main.class komutu bayt kodu talimatlarını gösterir.

Bayt kodu yığın makinesi (stack machine) modelini kullanır: işlenenler önce yığına konur, talimatlar yığından alır.

Yığın makinesi modeli

Bayt kodu, yığın makinesi (stack machine) modelini kullanır. Bir işlem önce tüm işlenenlerini yığına koyar, sonra talimat yığından alır ve sonucu geri koyar.

iload_1   # a'yi yığına koy
iload_2   # b'yi yığına koy
iadd      # ikisini popla, topla, sonucu pushla
ireturn   # sonucu dondur

Bu model, kayıt tabanlı makinelere göre daha az talimat üretir; talimatlar kısadır. JVM bu yığın yapısını her metot çağrısı için ayrı bir çerçevede (frame) tutar.

Uygulama Basit bir metodu çalıştır

Bir Main sınıfı tanımla. int add(int a, int b) metodu ekle; a + b döndürsün. main yönteminde add(3, 4) çağrısını yap ve sonucu System.out.println ile yazdır.

Başlangıç kodu

Main.java
public class Main {
    // int dönen iki parametreli metot tanımla

    public static void main(String[] args) {
        // metodu 3 ve 4 ile çağır ve yazdır
    }
}

Örnek çözüm

Main.java
public class Main {
    int add(int a, int b) {
        return a + b;
    }
    public static void main(String[] args) {
        Main m = new Main();
        System.out.println(m.add(3, 4));
    }
}

Beklenen çıktı

7

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bayt kodu talimatlarını eşleştir

Kavram Anlamı
iload Yerel değişkeni yükler
iadd İki int'i toplar
ireturn int döndürür
invokevirtual Metot çağırır

2 iadd talimatini tamamla

Soru
iload_1
iload_2
____
ireturn
Cevap
iload_1
iload_2
iadd
ireturn

Açıklama: iadd iki int değeri yığından poplayip toplar.

3 javap -c Main.class ne yapar?

  • JVM'i başlatır
  • Bayt kodu talimatlarını gösterir Doğru cevap
  • Sınıfı siler
  • Kaynak kodu derler

Açıklama: javap -c bayt kodu talimatlarını listeler.

Uzman bölümündeki tüm dersler