“Garbage Collector” Nedir?
Bu yazımızda “garbage collector nedir, ne işe yarar, JavaScript gibi dillerde bu nasıl kullanılır?” gibi sorulara cevap vereceğiz.
“Garbage Collector” Kavramı
Türkçesi “çöp toplayıcısı” olan garbage collector, bir programın çalışması sırasında oluşan atık (garbage) bellek bloklarını tespit edip bunları otomatik olarak temizler. Yani bu demektir ki, geliştiricilerin manuel olarak bellek tahsis etmeleri ve belleği geri vermeleri gerekmez.
Bir program çalıştığı sırasında, bellekte tahsis edilen ancak artık kullanılmayan nesneleri belirler ve bu nesnelere ayrılan belleği serbest bırakır. Başka bir deyişle, programın bellekteki “çöpü” toplar.
“Peki bu nasıl yapılıyor?” JavaScript’te hafıza yönetimi erişilebilirlik konsepti üzerinden olur. Garbage collector bellekteki nesnelere ve diğer veri yapısına erişerek, kullanılmayan ve artık referansı olmayan nesneleri tespit edip bunları bellekten temizler.
Yani bir nesnenin referansı, o nesnenin diğer bir nesne tarafından kullanıldığı anlamına geldiğinden eğer bir nesneye hiçbir referans yoksa, bu nesne artık kullanılmıyor demektir ve “garbage collector” tarafından tespit edilerek bellekten temizlenir. Aşağıda çalışma mantığını gösteren örnek bir “gif” verilmiştir:
Görüleceği üzere, çalışan bir JavaScript programı sırasında bazı nesneler ve değişkenler zamanla kullanılmaz hale gelir ya da programın diğer bölümlerinden erişilemez olur. Bu noktada “garbage collector” devreye girer ve artık kullanılmayan bu nesneleri tespit edip, onları bellekten siler.
Nesnelerin gereksiz hale gelip gelmediğini tespit etme süreci genellikle iki yöntemle yapılır:
- Referans Sayma
- Ulaşılabilirlik
Referans sayma, bir nesnenin kaç kez referanslandığına bakar ve bu sayı sıfıra indiğinde nesnenin artık kullanılmadığı sonucuna varılır. Ulaşılabilirlik yönteminde ise belirli bir kök nesneden başlayarak bir nesneye ulaşıp ulaşılamayacağı kontrol edilir.
Görüldüğü üzere “garbage collector” oldukça önemli bir iş yapmaktadır. Eğer “garbage collector” olmasaydı, programcıların bellek yönetimini manuel olarak yapmaları gerekecekti. Yani nesnelerin yaşam döngülerini takip etmeleri, kullanılmayan nesneleri bellekten silmeleri ve bellek sızıntılarına (memory leaks) karşı önlem almaları gerekecekti. Haliyle bellek yönetimi zorlaşacak ve bu işlemler hata yapmaya daha açık hale gelecekti.