CodeBlanks Logo Icon CodeBlanks

Bellek sızmaları

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.

Başlangıç kodu

script.js
// Bir öğeye olay dinleyicisi ekle ve temizleme fonksiyonu döndür
// element parametresi al; click için dinleyici ekle, cleanup döndür

Örnek çözüm

script.js
function setupLogger(element) {
  const log = () => console.log("active", element.id);
  element.addEventListener("click", log);
  return function cleanup() {
    element.removeEventListener("click", log);
  };
}

Soru ve cevaplar

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

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

  • Yerel değişken kullanımı
  • const ile değişken tanımlamak
  • Kullanılmayan bir zamanlayıcının temizlenmemesi Doğru cevap
  • arrow function kullanmak

Açıklama: Temizlenmeyen zamanlayıcı, referans tuttuğu sürece belleği canlı tutar.

2 Zamanlayıcıyı temizle

Soru
function stop() {
  ____;
  timer = null;
}
Cevap
function stop() {
  clearInterval(timer);
  timer = null;
}

Açıklama: setInterval ile kurulan sayacı clearInterval ile durdurursun.

3 Bellek terimlerini eşleştir

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

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