Middle+
Go dilində çirklənmə toplayıcısı (garbage collector) haqqında danış.
sobes.tech Süni İntellekt
AI-dan cavab
Go, aşağı gecikmeli, paralel, üç rəngli və kompakt olmayan çöp toplayıcıdan istifadə edir.
Əsas iş prinsipləri:
- İşarələmə (Mark): Kök göstəricilərdən (reyestrlər, goroutine yığınları, qlobal dəyişənlər) əldə edilə bilən obyektləri müəyyən edir. Üç rəngli alqoritm istifadə olunur (ağ - ziyarət olunmayıb, boz - ziyarət olunub, lakin törəmələr hələ yoxlanmayıb, qara - ziyarət olunub və bütün törəmələr yoxlanıb).
- Təmizləmə (Sweep): Əldə edilə bilməyən obyektləri (ağ qalanlar) silir və yaddaşı yenidən istifadə üçün azad edir.
Xüsusiyyətlər:
- Paralel: İşarələmə, istifadəçi kodunun icrası ilə paralel həyata keçirilir (STW - Stop-The-World - mərhələləri çox qısa).
- Aşağı gecikmələr: Tətbiqin işləməsində fasilələri minimuma endirmək üçün hazırlanıb.
- Kompakt olmayan: Canlı obyektləri yaddaşda hərəkət etdirmir, bu fragmentasiyaya səbəb ola bilər, lakin tətbiqi və işarələmə/təmizləmə sürətini artırır.
İş mərhələləri:
- İşarələmə köməyi: İstifadəçi goroutinləri yaddaş ayırması zamanı toplayıcıya kömək edir.
- İşarələmə: Əldə edilə bilən obyektlərin paralel işarələnməsi.
- İşarələmənin yekunlaşdırılması: İşarələməni tamamlayan qısa STW mərhələsi.
- Təmizləmə: Əldə edilə bilməyən obyektlərin paralel silinməsi.
İdarəetmə:
- Avtomatik.
- GC tetikleme hədləri
GOGCətraf mühit dəyişəni ilə tənzimlənir. Standart olaraq,GOGC=100, yəni yığın ölçüsü əvvəlki dövrə nisbətən iki qat artdıqda toplanma başlayır. runtime.GC()funksiyası, zorla toplanma işə salır, lakin onun istifadəsi standart kodda tövsiyə edilmir.
package main
import (
"runtime"
"time"
)
func main() {
// Zorla GC çağırış nümunəsi (nadirdir)
runtime.GC()
// GC statistikalarını oxuma nümunəsi
var memStats runtime.MemStats
runtime.ReadMemStats(&memStats)
// fmt.Printf("Ümumi ayırılmış yaddaş: %v bayt\n", memStats.TotalAlloc)
}
Üstünlüklər:
- Avtomatik yaddaş idarəetməsi, səhv ehtimalını azaldır (yaddaş sızması, ikili sərbəst buraxma).
- Paralel icra üçün hazırlanıb.
Çatışmazlıqlar:
- GC-nin qeyri-deterministik işləmə vaxtı.
- Əl ilə idarə etmə ilə müqayisədə yaddaş istifadəsinin artması mümkündür.