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

  1. İşarələmə köməyi: İstifadəçi goroutinləri yaddaş ayırması zamanı toplayıcıya kömək edir.
  2. İşarələmə: Əldə edilə bilən obyektlərin paralel işarələnməsi.
  3. İşarələmənin yekunlaşdırılması: İşarələməni tamamlayan qısa STW mərhələsi.
  4. 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.