programın çalışması sırasında bellekte dinamik olarak oluşturulan ve bir süre sonra gereksiz hale gelen verileri bellekten kaldıran algoritmaların ismi. bir programlama dilinin içerisinde ya da ek bir kütüphanede gelebilirler. garbage collector'un yaptığı işi programcı elle de yapabilirken, bu, gözden kaçan bazı memory leaklerin oluşmasına neden olabilmektedir.
java, javascript, php gibi dillerde de mevcut olan algoritmalardır. hatta bellek yönetiminin tamamıyla kullanıcıya daha doğrusu dilin dışındaki kütüphanelere bırakılmadığı çoğu dilde bu tarz algoritmaları görmek mümkündür.
örneğin programınıza bir string oluşturdunuz ve bunu bir değişkene atadınız ( string a = new string("abcde") ). pointer gibi bir nimete sahip olmayan bir dil kullanıyorsanız, diliniz değişkeninizi oluşan string'in adresine bir referans olarak atar. daha sonra bu string'i başka bir string'e eşitlemek istediğinizde (a = "xyz") eski string'iniz arada kaynar gider, arkanızda bir çöp haline gelir (dinamik olarak oluşturulmuşsa ve eşittir (=) operatörü özel olarak tanımlanmamışsa). işte bu durumda dilin garbage collector'u devreye girer, siler süpürür ortalığı.
.net* ortamında garbage collector, gc.collect() metodunun çağrılmasıyla manual olarak çağrılabilir. ancak garbage collector vazifeye çağrıldığında o an tüm aktif thread'leri askıya aldığı için sıkça kullanılması büyük performans problemlerine yol açar. bu sebeple bu şekilde bir kullanım önerilmez.
ayrıca garbage collector, bir object'i yok ederken o object'in destructor'ını çalıştırır.
objective-c'de garbage collector, utanç verici olsa da 2.0 ile platforma eklenmiştir. mac os x tiger (10.4) ve öncesinde garbage collector kullanımı mümkün değilken, mac os x leopard (10.5) ile beraber gc kullanımı mümkündür. yokluğunda retain count gibi ilkel yöntemlere başvurulur.