GC nedir?
- Go kursu
- Uzman
- Ders 7/34
- 4 dk
Çöp toplayıcının temel amacını öğrenirsin.
GC nedir?
Çöp toplayıcı (GC), programın artık erişemediği heap belleğini otomatik olarak geri kazanır. Go'da free çağrısı yoktur; bir nesneye hiçbir kökten (global değişkenler, goroutine yığınları, yazmaçlar) ulaşılamıyorsa GC onu toplar.
func yeni() *Dugum {
d := &Dugum{} // heap'e kaçar
return d
}
p := yeni()
p = nil // artık erişilemez → bir sonraki GC'de toplanırGo'nun GC'si eşzamanlı ve düşük gecikmelidir: duraklamalar genellikle milisaniyenin altındadır.
Yığın mı heap mi?
Yalnızca heap belleği GC'ye yük bindirir. Fonksiyon içinde kalan ve dışarı kaçmayan değerler yığında tutulur; fonksiyon dönünce bedavaya silinir. Derleyici hangisinin nereye gideceğine kaçış analiziyle karar verir. Daha az heap ayırma = daha az GC çalışması.
Uygulama GC sayısı
runtime.ReadMemStats ile NumGC değerini oku, runtime.GC() çağır ve tekrar oku. Sayının arttığını (sonra > once) yazdır.
Başlangıç kodu
package main
import (
"fmt"
"runtime"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"fmt"
"runtime"
)
func main() {
var a, b runtime.MemStats
runtime.ReadMemStats(&a)
runtime.GC()
runtime.ReadMemStats(&b)
fmt.Println(b.NumGC > a.NumGC)
}Beklenen çıktı
true
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir nesnenin toplanabilmesi için ne gerekir?
- Fonksiyonun bitmesi
- Hiçbir kökten ulaşılamaması Doğru cevap
- free ile işaretlenmesi
- nil atanmış olması
Açıklama: GC erişilebilirliğe bakar; nil atamak ancak son referans buysa nesneyi erişilemez yapar.
2 GC'yi elle tetikle
runtime.____() // genellikle gerekmez
runtime.GC() // genellikle gerekmez
Açıklama: runtime.GC() bir çöp toplama döngüsünü zorlar; ölçüm ve test dışında nadiren kullanılır.
3 Bellek kavramları
| Kavram | Anlamı |
|---|---|
Kök (root) |
Global ve yığın referansları |
Heap |
GC'nin yönettiği bellek |
Yığın |
Fonksiyonla birlikte silinir |
Erişilemez nesne |
Toplanır |