Middle+
Räägi Go keele prügikoristusest (garbage collector).
sobes.tech AI
Vastus AI-lt
Go kasutab paralleelset, kolmetvärvilist, mittekompaktset prügikoristust, mille latents on madal.
Peamised tööpõhimõtted:
- Märkimine (Mark): Määrab, millised objektid on kättesaadavad juurteviitidest (registreerid, gorutinite vardad, globaalsed muutujad). Kasutatakse kolmetvärvilist algoritmi (valge - külastamata, hall - külastatud, kuid veel mitte kontrollitud, must - külastatud ja kõik järeltulijad kontrollitud).
- Koristus (Sweep): Eemaldab kättesaamatud objektid (jäävad valgeks) ja vabastab mälu korduvkasutuseks.
Eraldused:
- Paralleelne: Märkimine toimub paralleelselt kasutaja koodi täitmisega (STW - Stop-The-World faasid on väga lühikesed).
- Madal latentsus: Disainitud minimeerima pauside aega rakenduse töös.
- Mittekompaktne: Ei liigu elavaid objekte mälus, mis võib põhjustada fragmentatsiooni, kuid lihtsustab teostust ja kiirendab märkimist/koristust.
Tööfaasid:
- Mark abiline: Kasutaja gorutiinid aitavad kogujal märkimisfaasis mälu eraldamisel.
- Märkimine: Paralleelne kättesaadavate objektide märkimine.
- Märkimise lõpetamine: Lühike STW faas märkimise finaliseerimiseks.
- Koristus: Paralleelne kättesaamatute objektide eemaldamine.
Juhtimine:
- Automaatne.
- Prügikoristuse läveseadised (GC trigger) on reguleeritavad keskkonnamuutuja
GOGCabil. Vaikimisi väärtus onGOGC=100, mis tähendab, et kogumine algab, kui kogumiku suurus kahekordistub võrreldes eelneva tsükliga. - Funktsioon
runtime.GC()käivitab sunniviisiliselt prügikoristuse, kuid selle kasutamist ei soovitata standardkoodis.
package main
import (
"runtime"
"time"
)
func main() {
// Näide sunniviisilisest GC kutsest
runtime.GC()
// Näide GC statistika saamisest
var memStats runtime.MemStats
runtime.ReadMemStats(&memStats)
// fmt.Printf("Kokku eraldatud mälu: %v baiti\n", memStats.TotalAlloc)
}
Eelised:
- Automaatne mälu haldus, vähendab vigade tõenäosust (mälulõhkumine, topeltvabastamine).
- Disainitud konkurentsivõimelisele täitmisele.
Miinused:
- Ebaselge tööaeg GC.
- Võimalik mälu kasutuse suurenemine võrreldes käsitsi juhtimisega.