JIT
Genel bakış

Bir bayt kodu derlenmiş sistemde, kaynak kodu bayt kodu olarak bilinen bir ara gösterime dönüştürülür. Bytecode, herhangi bir bilgisayar için makine kodu değildir ve bilgisayar mimarileri arasında taşınabilir olabilir. Bayt kodu daha sonra bir sanal makineden yorumlanabilir veya sanal makinede çalıştırılabilir. JIT derleyicisi bayt kodlarını birçok bölümde okur ve bunları dinamik olarak makine koduna derler; böylece program daha hızlı çalışabilir.
Bu, dosya başına, işlev başına veya herhangi bir keyfi kod parçası üzerinde yapılabilir; kod yürütüldüğünde (dolayısıyla "tam zamanında" adı alır) derlenebilir, ardından önbelleğe alınır ve daha sonra yeniden derlemeye gerek duymadan yeniden kullanılabilir.
JIT kodu genelde tercümanlardan daha iyi bir performans sunar. Buna ek olarak, bazı durumlarda, statik derlemeden daha iyi bir performans sunabilir; çünkü birçok optimizasyon yalnızca çalıştırma zamanında yapılabilir:
Derleme hedeflenen CPU'ya ve uygulamanın çalıştığı işletim sistemi modeline göre optimize edilebilir. Örneğin, JIT, CPU'nun desteklediğini algıladığında SSE2 vektör işlemci talimatlarını seçebilir. Bununla birlikte, şu anda bunu gerçekleştiren ana akım JIT yoktur. Statik bir derleyici ile bu seviyede optimizasyon özgüllüğünü elde etmek için, her bir amaçlanan platform / mimari için bir ikili derleme veya kodun bir bölümünün birden çok versiyonunu tek bir ikili içine dahil etmesi gerekir.
2. Sistem, programın içinde bulunduğu ortamda gerçekte nasıl çalıştığına ilişkin istatistikleri toplayabilir, optimum performans için yeniden düzenleyebilir ve yeniden derleyebilir. Bununla birlikte, bazı statik derleyiciler, profil bilgilerini girdi olarak da alabilir.
3. Sistem, dinamik bağlantı avantajlarını kaybetmeden ve statik derleyiciler ve bağlayıcılara özgü genel giderler olmadan küresel kod optimizasyonlarını (örn., Kütüphane işlevlerinin dahil edilmesi) yapabilir. Özellikle, genel satır içi ikameleri yaparken, statik bir derleme işlemi, çalışma zamanı kontrollerine ihtiyaç duyabilir. Nesnenin gerçek sınıfı satır içi yöntemi geçersiz kılarsa ve dizi erişimlerine ilişkin sınır koşul kontrollerinin işlenmesi gerekebileceğinde sanal bir çağrı olmasını sağlarlar. Çoğu durumda zamanında derleme ile bu işlemler döngülerin dışına taşınabilir, bu da genellikle yüksek hız artışları sağlar.
4. Bu, statik olarak derlenmiş çöp toplama dilleri ile mümkün olsa da, bir bayt kodu sistemi yürütülen kodu, daha iyi önbellek kullanımı için daha kolay bir şekilde yeniden düzenleyebilir.
Microsoft'un Native Image Generator (Ngen) hizmeti, ilk gecikmeyi azaltmada başka bir yaklaşım yapır. Ngen, Ortak Ara Dil görüntüsünde makine yerel koduna bayt olarak önceden derleme yapar. Sonuç olarak, çalışma zamanı derlemesine gerek yoktur. Microsoft Visual Studio 2005 ile birlikte gelen .NET framework 2.0, kurulumdan hemen sonra tüm Microsoft kitaplık DLL'lerinde Ngen'i çalıştırır. Bununla birlikte, profil destekli statik olarak derlenen kodun aşırı durumlarda JIT tarafından derlenmiş kod kadar iyi olamayacağı aynı sebeplerden ötürü JIT'lenmiş kodun kalitesi kadar iyi olmayabilir.
Bir AOT (zaman öncesi) derleyiciyi bir JIT derleyicisi (Excelsior JET) veya tercüman (GNU Compiler for Java) ile birleştiren Java uygulamaları da mevcuttur.