# Çöp toplama

Adres: https://softwaredictionary.org/tr/terimler/garbage-collection
Kategori: Programlamanın Temelleri
Son güncelleme: 2026-09-30
İngilizcesi: Garbage Collection
Okunuşu: garbıc kılekşın

Kısaca: Çöp toplama, dil çalışma zamanının programın artık kullanamadığı verileri bulup bu belleği yeniden kullanıma açtığı otomatik bellek yönetimidir.

## Çöp toplama (garbage collection) nedir?

Bir programın oluşturduğu her değer, kısa bir dizeden büyük bir nesneye dek bellekte yer kaplar. Çöp toplama, bir dilin çalışma zamanının artık ihtiyaç duyulmayan değerleri otomatik olarak bulup belleklerini geri kazandığı süreçtir. JavaScript, Java, C#, Python ve Go gibi diller bir çöp toplayıcı kullanır; bu yüzden geliştiricilerin belleği elle serbest bırakması nadiren gerekir.

Çoğu çöp toplayıcı erişilebilirlik (reachability) ilkesiyle çalışır. Global değişkenler ve o anda çalışan fonksiyonların değişkenleri gibi köklerden başlayarak toplayıcı, programın hâlâ ulaşabildiği tüm nesneleri bulmak için her referansı izler; ulaşamadığı her şey çöp sayılır. İşaretle ve süpür (mark-and-sweep) adı verilen bu yaklaşım genellikle, nesnelerin çoğu yalnızca kısa süre gerektiği için yeni nesneleri daha sık denetleyen nesil tabanlı toplamayla birleştirilir.

Çöp toplayıcı, kimsenin kullanmadığı her şeyi kaldıran bir ofis temizlik ekibi gibidir. Çalışanlar çöp çıkarmak yerine işlerine odaklanabilir, ancak ekip işini yapmak için zaman zaman faaliyeti durdurmak zorunda kalır. Aynı şekilde çöp toplama duraklamaları kısa yavaşlamalara yol açabilir; bu yüzden oyunlar ve gecikmeye duyarlı diğer sistemler toplayıcılarını dikkatle ayarlar.

Çöp toplama çoğu zaman, geliştiricilerin `free` gibi fonksiyonları kendilerinin çağırdığı ve yanlış yaparlarsa çökme ve güvenlik hatası riskine girdiği C ve C++ gibi dillerdeki elle bellek yönetimiyle karşılaştırılır. Rust, çöp toplayıcı olmadan belleği serbest bırakmak için derleyicinin denetlediği sahiplik kurallarını kullanan üçüncü bir yaklaşım benimser. Çöp toplama her bellek sızıntısını da önlemez: kodunuz sürekli büyüyen bir önbellekte ya da hiç kaldırılmayan bir olay dinleyicisinde olduğu gibi artık ihtiyaç duymadığı verilere referans tutmaya devam ederse, bu veri hiçbir zaman toplanamaz.

## Önemli noktalar

- Çöp toplama, programın artık ulaşamadığı belleği otomatik olarak serbest bırakır.
- Çoğu toplayıcı referansları köklerden izler; ulaşılamayan nesneler çöptür.
- Birçok bellek hatasını önler ama kısa duraklamalara ve ek bellek yüküne yol açabilir.
- Kod artık ihtiyaç duymadığı referansları tutmaya devam ederse bellek sızıntıları yine de olur.

## Örnek: JavaScript'te erişilebilirlik ve yaygın bir sızıntı

```javascript
let user = { name: "Ada", scores: new Array(1_000_000).fill(0) };
let admin = user; // a second reference to the same object

user = null;  // still reachable through admin, so it stays in memory
admin = null; // now unreachable: the garbage collector can free it

// A common leak: a cache that only ever grows
const cache = new Map();
function remember(key, value) {
  cache.set(key, value); // entries stay reachable forever
}

// A WeakMap holds keys weakly, so entries vanish once a key is unreachable
const metadata = new WeakMap();
```

## Sık sorulan sorular

**Hangi diller çöp toplama kullanır?**

JavaScript, Java, C#, Python, Go, Ruby ve Kotlin dahil çoğu modern üst seviyeli dil kullanır. C ve C++ elle bellek yönetimine dayanır; Rust ise çalışma zamanı toplayıcısı yerine derleme zamanı sahiplik kurallarıyla belleği otomatik olarak serbest bırakır.

**Çöp toplama varken bellek sızıntısı olabilir mi?**

Evet. Çöp toplayıcı yalnızca erişilemeyen belleği serbest bırakır; bu yüzden örneğin bir global değişken, sürekli büyüyen bir önbellek ya da hiç kaldırılmayan bir olay dinleyicisi tarafından hâlâ referans verilen nesneler, program onları bir daha kullanmayacak olsa bile bellekte kalır.

**JavaScript'te çöp toplamayı zorlayabilir miyim?**

Normal kodda hayır, çünkü çöpün ne zaman toplanacağına motor karar verir. Node.js, `--expose-gc` bayrağıyla başlatıldığında bir `global.gc()` fonksiyonu sunabilir, ancak bu üretimde kullanım için değil, hata ayıklama ve test içindir.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
