CodeBlanks Logo Icon CodeBlanks

JIT compilation

V8 JIT compilation ve TurboFan'ı öğrenirsin.

JIT eşik mantığı

V8 bir fonksiyonu hot işaretlemek için çağrı sayısına bakar. Çağrı sayısı bir eşiği geçince V8 fonksiyonu daha agresif iyileştirir. Bu eşik V8 sürümüne göre değişir ama fikir aynıdır: sık çalışan kod daha çok iyileştirme kazanır.

Bir isHot(callCount) fonksiyonu bu mantığı modeller: return callCount >= THRESHOLD. THRESHOLD bir sabittir; örneğin 100. isHot(150) true, isHot(50) false döndürür. Bu, V8'in kararını basit bir modelle anlamanı sağlar. Gerçek V8'de eşik daha karmaşıktır (geri alma, osilasyon) ama temel fikir budur: sıcaklık çağrı sıklığına bağlıdır.

Sıcak ve soğuk fonksiyonlar

V8 fonksiyonları soğuk (az çağrılan) ve sıcak (çok çağrılan) olarak ayırır. Soğuk fonksiyonlar hızlı bytecode ile yürütülür; sıcak fonksiyonlar makine koduna yükseltilir. Bu, derleme süresini sadece kazanan kodlara harcamanın yoludur.

Örnek: isHot(50) false döndürürse fonksiyon soğuktur; isHot(150) true döndürürse sıcaktır. V8 sıcak fonksiyonları tür geribildirimiyle (type feedback) iyileştirir: hangi türlerin geçtiğini izler, buna göre makine kodu üretir. Tür değişirse (örneğin hep sayı beklerken dize gelirse) V8 iyileştirmeyi geri alır (deoptimization). Bu yüzden kararlı türler kullanan kod daha hızlıdır.

Uygulama JIT eşik fonksiyonu yaz

const THRESHOLD = 100 tanımla. function isHot(callCount) { return callCount >= THRESHOLD; } yaz. console.log(isHot(150)) ve console.log(isHot(50)) yazdır.

Başlangıç kodu

index.js
// eşik sabitini tanımla
// isHot fonksiyonu yaz: çağrı sayısı eşiği geçiyorsa true döndürsün
// iki çağrıyı yazdır (150 ve 50)
// buraya yaz

Örnek çözüm

index.js
const THRESHOLD = 100;
function isHot(callCount) {
  return callCount >= THRESHOLD;
}
console.log(isHot(150));
console.log(isHot(50));

Beklenen çıktı

true
false

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Eşik koşulunu tamamla

Soru
return callCount >= ____;
Cevap
return callCount >= THRESHOLD;

Açıklama: callCount THRESHOLD ile karşılaştırılır.

2 Kavramı açıklamasına eşle

Kavram Anlamı
Sıcak fonksiyon Makine koduna yükseltilir
Soğuk fonksiyon Bytecode ile yürütülür
Type feedback Türleri izler
Deoptimization İyileştirmeyi geri alır

3 isHot(50) THRESHOLD=100 ise ne döndürür?

index.js
const THRESHOLD = 100;
function isHot(c) { return c >= THRESHOLD; }
isHot(50)
  • 50
  • false Doğru cevap
  • true
  • 100

Açıklama: 50 < 100 olduğundan false döner.

Uzman bölümündeki tüm dersler