Middle+
Go dilinde çöp toplayıcı (garbage collector) hakkında bilgi ver.
sobes.tech yapay zeka
AI'dan gelen yanıt
Go, düşük gecikmeli paralel, üç renkli ve kompakt olmayan bir çöp toplayıcı kullanır.
Temel çalışma prensipleri:
- İşaretleme (Mark): Kök göstergelerden (kayıtlar, goroutine yığınları, küresel değişkenler) erişilebilir olan nesneleri belirler. Üç renkli algoritma kullanılır (beyaz - ziyaret edilmedi, gri - ziyaret edildi, ancak çocuklar henüz kontrol edilmedi, siyah - ziyaret edildi ve tüm çocuklar kontrol edildi).
- Tarama (Sweep): Erişilemeyen nesneleri (beyaz kalanlar) kaldırır ve belleği tekrar kullanılmak üzere serbest bırakır.
Özellikler:
- Paralel: İşaretleme, kullanıcı kodunun yürütülmesiyle paralel olarak gerçekleşir (STW - Stop-The-World - aşamaları çok kısadır).
- Düşük gecikmeler: Uygulama çalışmasında duraklamaları en aza indirmek için tasarlanmıştır.
- Kompakt olmayan: Canlı nesneleri bellekte taşımak yerine, bu fragmentasyona yol açabilir, ancak uygulama ve işaretleme/temizleme hızını artırır.
Çalışma aşamaları:
- İşaretleme yardımı: Kullanıcı goroutine'leri, bellek tahsisi sırasında çöp toplayıcıya yardımcı olur.
- İşaretleme: Erişilebilir nesnelerin paralel işaretlemesi.
- İşaretleme sonlandırması: İşaretlemenin tamamlanması için kısa bir STW aşaması.
- Temizleme: Erişilemeyen nesnelerin paralel kaldırılması.
Yönetim:
- Otomatik.
- Çöp toplayıcı tetikleme eşikleri, ortam değişkeni
GOGCile ayarlanır. Varsayılan olarak,GOGC=100olup, bu, yığın boyutunun önceki döngüye göre iki katına çıkmasıyla başlar. runtime.GC()fonksiyonu, çöp toplamayı zorla başlatır, ancak kullanımı standart kodda önerilmez.
package main
import (
"runtime"
"time"
)
func main() {
// Zorunlu GC çağrısı örneği (nadiren gerekebilir)
runtime.GC()
// GC istatistikleri alma örneği
var memStats runtime.MemStats
runtime.ReadMemStats(&memStats)
// fmt.Printf("Toplam tahsis edilen bellek: %v bayt\n", memStats.TotalAlloc)
}
Avantajlar:
- Otomatik bellek yönetimi, hata olasılığını azaltır (bellek sızıntıları, çift serbest bırakmalar).
- Paralel yürütme için tasarlanmıştır.
Dezavantajlar:
- GC'nin deterministik olmayan çalışma süresi.
- Manuel yönetimle karşılaştırıldığında, bellek kullanımı artabilir.