JIT tam zamanında derleyici için kısa ve isim yanlış: çalışma zamanı sırasında kodun optimizasyonuna değer belirler ve bunları uygular. Normal derleyicilerin yerini almaz, ancak tercümanların bir parçasıdır. Ara kod kullanan Java gibi dillerin her ikisine de sahip olduğunu unutmayın : kaynak kodundan orta kod çevirisine normal bir derleyici ve performans artırıcı tercümana dahil edilen bir JIT.
Kod optimizasyonları kesinlikle "klasik" derleyiciler tarafından gerçekleştirilebilir, ancak asıl farkı not edin: JIT derleyicileri çalışma zamanında verilere erişebilir . Bu büyük bir avantaj; Açıkça kullanmak, açıkça zor olabilir.
Örneğin, şöyle bir kod düşünün:
m(a : String, b : String, k : Int) {
val c : Int;
switch (k) {
case 0 : { c = 7; break; }
...
case 17 : { c = complicatedMethod(k, a+b); break; }
}
return a.length + b.length - c + 2*k;
}
Normal bir derleyici bu konuda çok fazla şey yapamaz. Bununla birlikte, bir JIT derleyicisi m
bunun yalnızca k==0
bir nedenden dolayı çağrıldığını tespit edebilir (zamanla kod değiştiğinde böyle şeyler olabilir); daha sonra kodun daha küçük bir versiyonunu oluşturabilir (ve bunu kavramsal olarak küçük bir nokta olarak düşünmeme rağmen, onu yerel koda derleyin):
m(a : String, b : String) {
return a.length + b.length - 7;
}
Bu noktada, şu anda önemsiz olduğu için yöntem çağrısının satır içi bile büyük olasılıkla olacaktır.
Anlaşılan, Güneş javac
, Java 6’da yapılan çoğu optimizasyonu reddetti ; Bu optimizasyonların JIT’in yapmasını zorlaştırdığı ve sonunda derlenen kodların daha hızlı çalıştığı söylendi. Git figürü.