Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi

Sorunuz mu var? Belki de çoktan soruldu..

0
Garbage collector nedir?

Açık 1 Cevaplar 7 Gösterim Genel Kavramlar
Garbage collector nedir? Bütün dillerde var mıdır? Varsa nasıl, yoksa nasıl çalışılır?

1 cevap

0
Garbage collector: Türkçesi çöp toplayıcı.

Önce çöp kavramını programlama içinde biraz tanımlayalım, sonra toplama işlemine gelelim.
Bir uyglama içinde kullanılacak değerleri almak için değişkenleri kullanıyoruz. Ufak tefek bir programda kullanıcıdan aldığımız değerlerle işlemlerimizi yapıp uygulamamız bitebilir. Burada çöp diyeceğimiz birşey çıkmaz. Projemizin boyutlarını büyüttüğümüz zaman ihtiyaçlarımız değişecek.

Direk büyük bir uygulamadan ilerleyelim. Oyun yazan bir firmada yazılımcı olduğumuzu düşünelim (muhtemel bir durum). Oyun içindeki karakterler, işlemler çoğaldıkça kullanmamız gereken değişkenler devasa bir şekilde artacaktır. Uygulamada bir değişkeni kullandıktan sonra bir kez daha kullanmayacaksak ve bu hafızada duruyorsa bu bizim çöpümüz oluyor. Bu çöpleri toplamazsak etraf çöplüğe dönecek ve çöp bırakacak alan kalmayacak. C üzerinden örnek verirsek herhangi bir int/char değerinden bahsetmiyorum. Burada bahsettiğimiz hafızada dinamik olarak ayırmaya başladığımız, pointer kullandığımız değişkenler. Bu değişkenleri kullandıktan sonra free komutuyla ayrılan yerleri hafızaya geri vermezsek çok yakında out-of-memory hatası alacağız. Yani oluşturduğumuz değişkenler için kullanılan alanı hafızaya geri vermemiz gerekir.

Bu memory kullanımı genel anlamda zor bir iştir. Temelleri çok basit olmasına rağmen potansiyel ortaya çıkan hatalarda bu sorunları bulmak çok zorlaşır. Bütün uygulamada hafızaya geri vermediğimiz bir değişken bile uygulamayı patlatabilir.

Hafıza yönetimini daha kolay bir hale getirmek için zamanında (sanıyorum 70 li yıllar emin değilim) büyüklerimiz kullanılan hafıza alanlarının referanslarını kenarda biryerlere koymuşlar ve dönem dönem gidip bu bu alanları kullanan bir değişken var mı diye bakar olmuşlar. Bir nebze o alanın yanına geliyor ve bu alanı kullanan var mı şeklinde bir soru soruyor. Eğer kimse(hiçbir değişken) kullanmıyorsa bunu hafızaya geri vermişler. Bunu yapan küçük threadlar da çöp toplayıcısı olarak isimlendirilmiş.

Garbage collector normalde kullandığız programlama dili tarafından desteklenen bir yapı olmakla veraber, temel olarak desteklenmese de kendiniz bir gerçekleştirimini yapabilirsiniz. Direk destekleyenini kullanmak tabi ki daha kolay.

Garbage collector temel olarak programcıya hafıza ile fazla ilgilenmeden programını yazmasına olanak verir. En büyük iyiliği hafıza yönetim kodlarını yazma ihtiyacı olmamasından dolayı programlamanın daha kolay olması.

Artısı olduğu gibi eksileri de vardır. Genel olarak programlara bir yük getirir. Genelde (özel durumlar hariç) performans daha zayıftır. Yani kendin doldur kendin temizle işlemi daha hızlı çalışır.

Örnek olarak şu an modern diller diye isimlendirilen dillerin hemen hepsinde garbage collector bulunur. JVM üzerinde çalışan dillerin hepsi destekler. Java/Scala/Groovy/closure/.. vs. Pyhton, ruby gibi dillerde de desteklenir.

C++ da özellikle birkaç gerçekleştirimini görmüştüm ama standard dil özelliklerinde desteklenmez. Kendiniz yazmanız gerekir. C/Pascal/delphi desteklemez.
13 Ocak kenan (2,833 puan) cevapladı
...