Bellek Sızıntısı Nedir?
İngilizce: Memory Leak
Yayın: · Son güncelleme:
Bellek Sızıntısı Nedir? Kısaca
Bellek sızıntısı (memory leak), bir programın artık ihtiyaç duymadığı belleği serbest bırakmaması sonucu RAM kullanımının zamanla sürekli artmasıdır. Uzun süre çalışan uygulamalarda yavaşlamaya ve çökmelere yol açar.

Bellek sızıntısı nedir?
Bellek sızıntısı, programın işi biten verileri bellekten temizlememesi ve bu yüzden zamanla giderek daha fazla RAM tüketmesidir. Musluktan damlayan su gibi tek tek önemsiz görünür, ama birikince sorun olur. Saatler ya da günler boyunca çalışan sunucu uygulamalarında etkisi daha belirgindir.
Neden olur?
C ve C++ gibi elle bellek yönetimi yapılan dillerde en yaygın neden, ayrılan alanın serbest bırakılmasının unutulmasıdır. Çöp toplayıcılı dillerde ise sebep çoğunlukla gereksiz referanslardır. Hiç temizlenmeyen bir önbellek, kaldırılmayan olay dinleyicileri ve sürekli büyüyen global listeler tipik örneklerdir.
Varsayımsal bir senaryo düşünün. Bir web sunucusu her isteği hata ayıklama amacıyla bir global listeye ekliyor, ama listeyi hiç boşaltmıyor. Günde 100.000 istek alan bir sunucuda bu liste her gün büyür ve sonunda bellek biter.
Nasıl fark edilir?
Belirtiler genellikle yavaş gelişir. Uygulama ilk açıldığında hızlıdır, birkaç saat sonra yavaşlar. Görev yöneticisinde bellek kullanımının yük azalsa bile düşmediğini görürsünüz. En sonunda program "out of memory" hatasıyla çöker ya da işletim sistemi onu kapatır.
Nasıl çözülür?
İlk adım, bellek kullanımını zaman içinde izlemektir. Tarayıcının geliştirici araçlarındaki bellek sekmesi, Java için heap dump analizleri ve Python için tracemalloc modülü, hangi nesnelerin biriktiğini gösterir. Önbelleklere boyut sınırı koyun, kullanılmayan dinleyicileri kaldırın ve büyük verileri işi bitince referanssız bırakın.
Sıkça Sorulan Sorular
Bellek sızıntısı bilgisayara zarar verir mi?
Donanıma kalıcı zarar vermez. Sızıntı yapan program kapatıldığında işletim sistemi onun kullandığı belleği geri alır.
Bellek sızıntısı ile bellek taşması aynı şey mi?
Hayır. Sızıntıda kullanılmayan bellek geri verilmez ve birikir. Bellek taşmasında ise program ayrılan alanın dışına veri yazar ya da kullanılabilir belleği aşar.