Sobes.tech
Middle+

Pastāsti par atkritumu savācēju (garbage collector) Go valodā.

sobes.tech AI

Atbilde no AI

Go izmanto paralēlo, trīskrāsu, nekompaktējošu atkritumu savācēju ar zemu aizkavi.

Galvenie darba principi:

  • Marķēšana (Mark): Nosaka, kuri objekti ir sasniedzami no sakņu norādītājiem (reģistri, gorutīnu stabi, globālās mainīgās). Tiek izmantots trīskrāsu algoritms (balts - neapmeklēts, pelēks - apmeklēts, bet vēl nav pārbaudīts, melns - apmeklēts un visi pēcnācēji pārbaudīti).
  • Vākšana (Sweep): Noņem nepieejamos objektus (paliek balti) un atbrīvo atmiņu atkārtotai izmantošanai.

Īpatnības:

  • Paralēla: Marķēšana notiek paralēli ar lietotāja koda izpildi (STW - Stop-The-World fāzes ir ļoti īsas).
  • Zemas aizkaves: Izstrādāts, lai samazinātu pārtraukumus lietojumprogrammā.
  • Nekompaktējošs: Nepārvieto dzīvos objektus atmiņā, kas var novest pie fragmentācijas, bet vienkāršo īstenošanu un paātrina marķēšanu/vākšanu.

Darba fāzes:

  1. Marķēšanas palīgs: Lietotāja gorutīnas palīdz savācējam marķēšanas fāzē, sadalot atmiņu.
  2. Marķēšana: Paralēla sasniedzamo objektu marķēšana.
  3. Marķēšanas noslēgums: Īsa STW fāze marķēšanas pabeigšanai.
  4. Vākšana: Paralēla nepieejamo objektu dzēšana.

Vadība:

  • Automātiska.
  • Atkritumu savākšanas sliekšņi regulējami ar vidi mainīgo GOGC. Noklusējuma vērtība GOGC=100, kas nozīmē, ka savākšana sāksies, kad kaudzes izmērs dubultosies salīdzinājumā ar iepriekšējo ciklu.
  • Funkcija runtime.GC() obligāti izsauc atkritumu savākšanu, bet tās lietošana nav ieteicama standartkodā.
package main

import (
	"runtime"
	"time"
)

func main() {
	// Piemērs obligātai GC izsaukšanai
	runtime.GC()

	// Piemērs iegūt GC statistiku
	var memStats runtime.MemStats
	runtime.ReadMemStats(&memStats)
	// fmt.Printf("Kopējā piešķirtā atmiņa: %v baitu\n", memStats.TotalAlloc)
}

Priekšrocības:

  • Automātiska atmiņas pārvaldība, samazina kļūdu iespējamību (atmiņas noplūdes, dubultu brīvu atbrīvošanu).
  • Izstrādāts konkurētspējīgai izpildei.

Trūkumi:

  • Netransparenta darba laika GC.
  • Iespējams palielināt atmiņas patēriņu salīdzinājumā ar manuālo pārvaldību.