İçeriğe geç
parazade

Çöp Toplama Nedir?

İngilizce: Garbage Collection

Yayın: · Son güncelleme:

Çöp Toplama Nedir? Kısaca

Çöp toplama (garbage collection), programın artık kullanmadığı bellek alanlarını otomatik olarak bulup serbest bırakan mekanizmadır. Java, C#, Python, JavaScript ve Go gibi dillerde geliştiricinin belleği elle temizleme yükünü alır.

Çöp Toplama nedir?
İçindekiler
  1. Çöp toplama nedir?
  2. Nasıl çalışır?
  3. Avantajları ve bedeli

Çöp toplama nedir?

Çöp toplama, yazılımda kullanılmayan nesnelerin bellekten otomatik olarak temizlenmesidir. İngilizcede garbage collection, kısaca GC olarak geçer. Geliştirici bir nesne oluşturur ama onu silmekle uğraşmaz; dilin çalışma ortamı bu işi arka planda yapar.

Nasıl çalışır?

Çöp toplayıcı, programın hâlâ erişebildiği nesneleri bulmakla işe başlar. Global değişkenler ve o an çalışan fonksiyonların yerel değişkenleri başlangıç noktasıdır. Buralardan referans zinciriyle ulaşılabilen her nesne "canlı" sayılır. Hiçbir yoldan ulaşılamayan nesneler ise çöptür ve kapladıkları alan geri alınır.

Örneğin bir fonksiyon içinde 10.000 elemanlı geçici bir liste oluşturduğunuzu düşünün. Fonksiyon bittiğinde listeye işaret eden bir değişken kalmaz. Bir sonraki toplama turunda çöp toplayıcı bu listeyi fark eder ve belleği serbest bırakır.

Bazı diller farklı yöntemler kullanır. Python, her nesneye kaç referans olduğunu sayar ve sayı sıfıra düşünce nesneyi hemen siler; buna ek olarak döngüsel referansları yakalayan bir toplayıcı da çalıştırır.

Avantajları ve bedeli

En büyük kazanç güvenliktir. Silinmiş belleği kullanmak ya da aynı alanı iki kez serbest bırakmak gibi hatalar büyük ölçüde ortadan kalkar. Bunun bedeli, toplama sırasında harcanan işlemci zamanı ve ara sıra yaşanabilen kısa duraklamalardır.

Oyun ve yüksek frekanslı işlem sistemleri gibi milisaniyelerin önemli olduğu alanlarda bu duraklamalar dikkate alınır. Sıradan bir web uygulamasında ise genellikle sorun olmaz. Uygulamanızda düzenli takılmalar görüyorsanız, dilinizin GC loglarını açıp toplama sürelerini incelemek iyi bir başlangıçtır.

Sıkça Sorulan Sorular

Çöp toplama programı yavaşlatır mı?

Biraz ek iş yükü getirir ve bazı durumlarda kısa duraklamalara neden olabilir. Modern çöp toplayıcılar bu duraklamaları çok kısa tutacak şekilde tasarlanmıştır, bu yüzden çoğu uygulamada fark hissedilmez.

Çöp toplama bellek sızıntısını tamamen önler mi?

Hayır. Gereksiz yere referansını tuttuğunuz nesneler hâlâ kullanılıyor sayılır ve temizlenmez. Bu tür sızıntılar çöp toplayıcılı dillerde de görülür.

İlgili terimler

Bellek Yönetimi(Memory Management)Bellek yönetimi, bir programın çalışırken ihtiyaç duyduğu belleği ayırma, kullanma ve işi bitince geri verme sürecidir. Bu iş dile göre ya geliştirici tarafından elle ya da çöp toplayıcı gibi otomatik mekanizmalarla yapılır.Bellek Sızıntısı(Memory Leak)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.HeapHeap, yazılımda iki anlamda kullanılır: programın çalışırken dinamik olarak bellek ayırdığı geniş bellek bölgesi ve en büyük ya da en küçük elemanı her zaman en üstte tutan ağaç biçimli veri yapısı.Nesne(Object)Nesne (object), nesne yönelimli programlamada bir sınıftan üretilen, kendi verilerini (özellikler) ve davranışlarını (metotlar) taşıyan somut örnektir. Örneğin `Araba` sınıfından üretilen her araç ayrı bir nesnedir.Fonksiyon(Function)Fonksiyon, programlamada belirli bir işi yapan, isim verilmiş ve gerektiğinde tekrar tekrar çağrılabilen kod bloğudur. Girdi olarak parametre alabilir ve geriye bir değer döndürebilir.Liste(List)Liste (list), programlamada birden fazla değeri sıralı tutan, eleman eklenip çıkarılabilen ve değiştirilebilen veri yapısıdır. Python'da köşeli parantezle yazılır: `meyveler = ["elma", "armut"]`.Değişken(Variable)Değişken, programlamada bir değeri bellekte saklamak için kullanılan isimli alandır. İçindeki değer program çalışırken okunabilir ve değiştirilebilir; örneğin `fiyat = 250` satırı fiyat adlı bir değişken oluşturur.