Java Sanal Makinesi - JIT Optimizasyonları

Bu bölümde JIT Optimizasyonları hakkında bilgi edineceğiz.

Yöntem Satır İçi

Bu optimizasyon tekniğinde, derleyici işlev çağrılarınızı işlev gövdesi ile değiştirmeye karar verir. Aşağıda aynı şey için bir örnek var -

int sum3;

static int add(int a, int b) {
   return a + b;
}

public static void main(String…args) {
   sum3 = add(5,7) + add(4,2);
}

//after method inlining
public static void main(String…args) {
   sum3 = 5+ 7 + 4 + 2;
}

Bu tekniği kullanarak, derleyici makineyi herhangi bir işlev çağrısı yapma ek yükünden kurtarır (parametreleri yığına itip atmayı gerektirir). Böylece üretilen kod daha hızlı çalışır.

Yöntem satır içi işlemi yalnızca sanal olmayan işlevler (geçersiz kılınmayan işlevler) için yapılabilir. Bir alt sınıfta 'add' yönteminin üzerine basıldıysa ve yöntemi içeren nesnenin türü çalışma zamanına kadar bilinmiyorsa ne olacağını düşünün. Bu durumda, derleyici hangi yöntemi satır içi yapacağını bilemez. Ancak, yöntem 'son' olarak işaretlenmişse, derleyici, herhangi bir alt sınıf tarafından geçersiz kılınamayacağı için satır içi olabileceğini kolayca bilir. Son bir yöntemin her zaman sıralı olacağının hiçbir şekilde garanti edilmediğini unutmayın.

Ulaşılamayan ve Ölü Kod Eliminasyonu

Ulaşılamayan kod, herhangi bir olası yürütme akışıyla erişilemeyen koddur. Aşağıdaki örneği ele alacağız -

void foo() {
   if (a) return;
   else return;
   foobar(a,b); //unreachable code, compile time error
}

Ölü kod da erişilemez koddur, ancak derleyici bu durumda bir hata verir. Bunun yerine, sadece bir uyarı alıyoruz. Yapıcılar, işlevler, try, catch, if, while, vb. Gibi her kod bloğunun JLS'de (Java Dil Spesifikasyonu) tanımlanan erişilemez kod için kendi kuralları vardır.

Sabit Katlama

Sabit katlama konseptini anlamak için aşağıdaki örneğe bakın.

final int num = 5;
int b = num * 6; //compile-time constant, num never changes
//compiler would assign b a value of 30.