Sobes.tech
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ı:

  1. İşaretleme yardımı: Kullanıcı goroutine'leri, bellek tahsisi sırasında çöp toplayıcıya yardımcı olur.
  2. İşaretleme: Erişilebilir nesnelerin paralel işaretlemesi.
  3. İşaretleme sonlandırması: İşaretlemenin tamamlanması için kısa bir STW aşaması.
  4. Temizleme: Erişilemeyen nesnelerin paralel kaldırılması.

Yönetim:

  • Otomatik.
  • Çöp toplayıcı tetikleme eşikleri, ortam değişkeni GOGC ile ayarlanır. Varsayılan olarak, GOGC=100 olup, 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.