JIT derleme
Just-in-Time Compilation
- İngilizcesi
- JIT Compilation
- Türkçe karşılığı
- anında derleme
- Okunuşu
- cit
Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.
Kısaca
JIT derleme, programın en sık çalışan kısımlarını çalışma anında makine koduna çevirerek yorumlayıcının hızlı açılışını derlenmiş kodun hızıyla birleştirir.
JIT derleme nedir?
Just-in-time (JIT) derleyici, çalışan bir programın içinde iş görür. Program, kodu hemen çalıştırabilen bir yorumlayıcıyla başlar; bu sırada çalışma ortamı her fonksiyonun ve döngünün kaç kez çalıştığını sayar. Hot, yani çok sık çalıştığı anlaşılan kod, işlemcinin anladığı makine koduna derlenir ve sonraki çağrılar bu daha hızlı sürümü kullanır.
Program çalışırken derlediği için bir JIT derleyici, gerçekte olan duruma göre optimizasyon yapabilir: bir fonksiyon hep sayılarla çağrılıyorsa, sayılara özel kod üretebilir. Bu tahmin sonradan yanlış çıkarsa çalışma ortamı optimize edilmiş kodu atar ve daha yavaş koda geri döner; buna deoptimizasyon denir. Chrome ve Node.js'teki V8, Java HotSpot sanal makinesi ve .NET hep böyle çalışır; genellikle hızlıdan çok optimize edilmişe uzanan birkaç kademeleri vardır.
JIT derleme, iki klasik yaklaşımın arasında durur. C, Go ve Rust'taki gibi ahead-of-time (AOT) derleme her şeyi program çalışmadan önce çevirir; düz bir yorumlayıcı ise hiçbir şeyi önceden çevirmez. JIT'in bedeli ısınma süresi ve bellektir: kod derlenene kadar yavaştır. Bu yüzden kısa süre çalışan programlar ve iOS uygulamaları gibi çalışma anında kod üretmeyi yasaklayan platformlar AOT kullanır. Python 3.13 sürümünde deneysel bir JIT derleyici ekledi.
Önemli noktalar
- JIT derleyici, sık çalışan kodu program çalışırken makine koduna çevirir.
- Programlar bir yorumlayıcıyla başlar; hot kod buna değdiğini gösterince derlenir.
- Çalışma anında gördükleri, JIT'in kodu özelleştirmesini ve bir tahmin tutmadığında deoptimizasyon yapmasını sağlar.
- Bedeli ısınma süresi ve bellektir; ahead-of-time derleme ikisinden de kaçınır.
Örnek
// Run with: node --trace-opt hot.js
function add(a, b) {
return a + b;
}
let sum = 0;
for (let i = 0; i < 1e6; i++) {
sum = add(sum, i); // a million calls make add "hot"
}
console.log(sum); // 499999500000
// Among V8's log lines, add is compiled by Maglev, then by TurboFan:
// [marking … <JSFunction add …> for optimization to MAGLEV, …, reason: hot and stable]
// [marking … <JSFunction add …> for optimization to TURBOFAN_JS, …, reason: hot and stable]Sık sorulan sorular
JIT derleme, ahead-of-time derlemeden daha mı hızlı?
Genel olarak hayır. Ahead-of-time derlenmiş programlar hızlı açılır ve çalışırken derleyiciye ihtiyaç duymaz. JIT daha yavaş başlar ama çalışma anında gördüklerini kullanabilir; bu yüzden sunucular gibi uzun süre çalışan programlarda ahead-of-time koda yetişebilir, hatta bazen onu geçebilir. Hangisinin kazanacağı iş yüküne bağlıdır.
Python'ın JIT derleyicisi var mı?
Standart CPython, 3.13 sürümünde varsayılan olarak kapalı, deneysel bir JIT derleyici ekledi. Alternatif bir Python gerçekleştirimi olan PyPy ise yıllardır JIT kullanıyor ve saf Python kodunu çoğu zaman birkaç kat daha hızlı çalıştırıyor.
İlgili sayfalar
- DerleyiciProgramlamanın Temelleri, s. 12Derleyici, bir programlama dilinde yazılmış kaynak kodu, bilgisayarın çalıştırabileceği makine kodu gibi daha alt seviyeli bir biçime çeviren programdır.
- YorumlayıcıProgramlamanın Temelleri, s. 55Yorumlayıcı, tüm programı önce ayrı bir çalıştırılabilir dosyaya çevirmek yerine kaynak kodu doğrudan, adım adım çalıştıran bir programdır.
- JavaScriptWeb Geliştirme, s. 25JavaScript, web tarayıcılarında sayfaları etkileşimli hale getiren ve Node.js gibi çalışma ortamlarıyla sunucularda da çalışan programlama dilidir.
- JavaProgramlama Dilleri, s. 15Java, Java Sanal Makinesi için bayt koda derlenen, statik tipli ve nesne yönelimli bir programlama dilidir; programlar birçok platformda çalışabilir.
- Sanal MakineDevOps ve Bulut, s. 45Sanal makine, paylaşılan fiziksel donanımda kendi işletim sistemini çalıştıran, aynı ana makinedeki diğerlerinden yalıtılmış yazılım tabanlı bilgisayardır.
- Çöp toplamaProgramlamanın Temelleri, s. 9Çöp toplama, dil çalışma zamanının programın artık kullanamadığı verileri bulup bu belleği yeniden kullanıma açtığı otomatik bellek yönetimidir.
- JVMProgramlama Dilleri, s. 17JVM, Java bytecode'unu çalıştırır; böylece derlenmiş bir program her işletim sisteminde çalışır. Kotlin, Scala ve Clojure da bu bytecode'a derlenir.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin