CodeBlanks Logo Icon CodeBlanks

Bellek sızmaları

JavaScript kursu · Uzman · Ders 11/63

Sık karşılaşılan bellek sızması nedenlerini ve nasıl önleneceğini öğrenirsin.

Bellek sızıntısı

Bellek sızıntısı, bir programın kullanmadığı belleği çöp toplayıcıya geri verememesidir. JavaScript'te çöp toplayıcı (garbage collector), artık erişilemeyen verileri otomatik temizler.

Ancak bir referans yanlışlıkla canlı tutulursa, o veri hiçbir zaman serbest bırakılmaz. Zamanla biriken bu veriler sayfa yavaşlar ve sonunda çökebilir. Bu yüzden zamanlayıcı ve dinleyicileri temizlemek önemlidir.

Sızıntıyı önlemek

Sızıntıyı önlemek için gereksiz referansları koparmalısın. Zamanlayıcıları clearInterval ile durdur, olay dinleyicilerini removeEventListener ile kaldır.

Büyük nesneleri tutarken WeakMap veya WeakSet kullanmak, anahtar çöp toplandığında değerin de otomatik temizlenmesini sağlar. Bu, önbellek gibi yapılarla çalışırken ek bir güvence sunar ve sızıntı riskini azaltır.

Uygulama Dinleyici ve cleanup

setupLogger adında bir fonksiyon yaz. element parametresini alıp click olayı için bir dinleyici eklesin ve cleanup adında bir temizleme fonksiyonu döndürsün. cleanup, dinleyiciyi removeEventListener ile kaldırsın.

Örnek çözümü göster
log fonksiyonunu sakla; addEventListener ile ekle, return function cleanup() ile removeEventListener çağır.

Örnek çözüm:
function setupLogger(element) {
  const log = () => console.log("active", element.id);
  element.addEventListener("click", log);
  return function cleanup() {
    element.removeEventListener("click", log);
  };
}

Kendini test et

  1. Aşağıdakilerden hangisi bellek sızıntısına yol açar?

    • Yerel değişken kullanımı
    • Kullanılmayan bir zamanlayıcının temizlenmemesi
    • const ile değişken tanımlamak
    • arrow function kullanmak
    Cevabı göster

    Kullanılmayan bir zamanlayıcının temizlenmemesi — Doğru! Temizlenmeyen zamanlayıcı, referans tuttuğu sürece belleği canlı tutar.

  2. Zamanlayıcıyı temizle

    function stop() {
      ____;
      timer = null;
    }
    Cevabı göster
    function stop() {
      clearInterval(timer);
      timer = null;
    }
  3. Bellek terimlerini eşleştir

    garbage collection
    çöp toplama
    closure
    kapsamı canlı tutar
    WeakMap
    zayıf referans
    retained reference
    tutulan referans

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