Garbage Collector Nedir?
Bu yazımızda; “Garbage collector nedir, ne işe yarar, JavaScript gibi dillerde nasıl kullanılır?” gibi sorulara cevap vereceğiz.
Garbage Collector
Garbage collector, Türkçesiyle “çöp toplayıcı,” bir programın çalışması sırasında kullanılmayan bellek bloklarını tespit edip otomatik olarak temizleyen bir mekanizmadır. Bu sistem sayesinde geliştiricilerin manuel olarak bellek tahsisi yapması veya kullanılmayan belleği geri vermesi gerekmez.
Program çalışırken, bellekte yer kaplayan 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 bellekte biriktirdiği “çöpü” temizler ve kullanılabilir belleği geri kazandırır.
Peki, bu işlem nasıl gerçekleşir?
JavaScript gibi dillerde hafıza yönetimi, erişilebilirlik prensibine dayanır. Garbage collector, bellekteki nesnelere ve veri yapılarına erişerek, hangi nesnelerin hala kullanıldığını kontrol eder. Eğer bir nesneye herhangi bir referans kalmamışsa -yani artık erişilemiyorsa- bu nesne kullanılmıyor demektir. Çöp toplayıcı bu tür nesneleri tespit eder ve belleği serbest bırakır.
Tekrar ediyorum; bir nesne başka bir nesne tarafından referans alıyorsa hala kullanılabilir kabul edilir. Ancak, bir nesneye hiçbir referans kalmadığında, garbage collector bu nesneyi “çöp” olarak işaretler ve bellekten temizler. Bu işlem, bellek yönetimini kolaylaştırır ve bellek sızıntılarını önlemeye yardımcı olur. Bu sayede programlar daha verimli çalışır ve sistem kaynakları daha etkin bir şekilde kullanılır.
Aşağıda, garbage collector’un ç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.
Aşağıdaki örneği inceleyiniz:
obj
adında bir nesne oluşturulur.reference
,obj
nesnesini işaret eden bir başka referanstır. Bu durumda garbage collector nesneyi temizleyemez çünkü nesneye bir referans hâlâ vardır.- İlk olarak
obj
referansı kaldırılır (null
atanır), ancakreference
referansı nesneyi hâlâ işaret ettiği için nesne bellekten temizlenmez. reference
danull
atanarak işaretini kaybeder. Şimdi nesneye hiçbir referans kalmadığından garbage collector nesneyi temizler.
Garbage collector, nesnelerin artık kullanılmadığını tespit etmek için iki temel yöntem kullanır: Referans Sayma ve Ulaşılabilirlik.
- Referans Sayma:
Bu yöntemde, bir nesnenin kaç kez referanslandığı takip edilir. Eğer bir nesneye yapılan referans sayısı sıfıra düşerse, bu nesnenin artık kullanılmadığı anlaşılır ve bellekten temizlenir. Ancak, bu yöntem döngüsel referansları tespit edemediği için sınırlı bir kullanıma sahiptir. - Ulaşılabilirlik:
Bu yöntemde, belirli bir “kök nesneden” (örneğin, global değişkenler veya fonksiyon çağrı yığınındaki aktif nesneler) başlayarak, diğer nesnelere ulaşılıp ulaşılamayacağı kontrol edilir. Eğer bir nesneye kök nesneden erişilemiyorsa, bu nesne artık kullanılmıyor demektir ve garbage collector tarafından temizlenir. Modern garbage collector’lar genellikle bu yöntemi kullanır.
Eğer garbage collector olmasaydı programcıların bellek yönetimini manuel olarak yapmaları gerekirdi. Bu durumda, her nesnenin yaşam döngüsünü takip etmek, kullanılmayan nesneleri elle temizlemek ve bellek sızıntılarını (memory leaks) önlemek zorunda kalırlardı. Bu işlemler oldukça karmaşık ve hata yapmaya açık olurdu. Garbage collector sayesinde bu yük programcıdan alınır ve bellek yönetimi otomatik hale getirilir, bu da yazılım geliştirme sürecini kolaylaştırdığı gibi daha güvenilir hale getirir.