Bytecode
- Java kursu
- Uzman
- Ders 3/46
- 5 dk
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 dondurBu 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
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
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
iload_1
iload_2
____
ireturn
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.