5 Nisan 2012 Perşembe

JAVA Bytecode Nasıl Elde Edilir?

JAVA bytecode hakkında bir önceki yazımda yaptığımız girizgahtan sonra gelelim bu bytecode'u nasıl elde edeceğimize.

Bunun için ihtiyacımız olan şeyler herhangi bir konsol penceresi (Windows Command Prompt, Unix-Solaris Console vb.) ve sistemimizde kurulu olan JDK (JAVA Development Kit). Yapmamız gereken ise JDK'nın \bin klasörüne gidip javap dosyasını çalıştırmak... (Devam)

ÖNEMLİ NOT : Bloglarda yazılan yazıları kopyalayıp kendi sitenizde, forumlarda yayınlamak çok hoş gibi görünse de aslında makaleyi yazan kişinin cesaretini kıran, motivasyonunu yok eden bir davranıştır. Burada yazılan yazıların da bir kısmını ya da tamamını kaynak göstermeden kopyalayan kişi düdüklü tenceredir, Sarkozy'dir.

Evet, şimdi biraz Yazılım Yazalım! Ben bu amaçla 'Deneme' isminde bir proje oluşturdum ve 'deneme' isminde bir de package'ım var. Bu package altında ByteCodeTest isminde bir class oluşturdum. Şöyle ki:
public class ByteCodeTest {

    int i;

    public ByteCodeTest() {
        i = 0;
    }

    public void artir() {
        i = i + 1;
    }

    public void artirAlternatif() {
        i++;
    }
}
Projeyi derledikten sonra sıra geldi JAVA bytecode'u elde etmeye. Burada kullanacağımız komut:

javap -c

olacak. Bunun için ben kendi sistemimde aşağıdaki komutu konsola yazdım (resmi büyütmek için üzerine tıklayın) :


Elde ettiğim çıktı şu şekilde oldu:
Compiled from "ByteCodeTest.java"
public class deneme.ByteCodeTest {
  int i;

  public deneme.ByteCodeTest();
    Code:
       0: aload_0      
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: aload_0      
       5: iconst_0     
       6: putfield      #2                  // Field i:I
       9: return       

  public void artir();
    Code:
       0: aload_0      
       1: aload_0      
       2: getfield      #2                  // Field i:I
       5: iconst_1     
       6: iadd         
       7: putfield      #2                  // Field i:I
      10: return       

  public void artirAlternatif();
    Code:
       0: aload_0      
       1: dup          
       2: getfield      #2                  // Field i:I
       5: iconst_1     
       6: iadd         
       7: putfield      #2                  // Field i:I
      10: return       
}
Burada, yukarıda JAVA dilinde yazmış olduğumuz ByteCodeTest sınıfının JAVA bytecode'una dönüştürülmüş halini görmekteyiz. Constructor ve methodlarımız, bytecode gösteriminde de aynı isimlere sahip olduğundan ayırt etmekte sıkıntı çekmeyeceğiz.

Bir sonraki yazımda dönüştürdüğümüz bu JAVA bytecode'un ayrıntılarını ve bize ne ifade ettiğini inceleyeceğiz.

Hiç yorum yok:

Yorum Gönder