Sobes.tech
Junior — Middle

Spiega il meccanismo di raccolta automatica dei rifiuti nel linguaggio Go e come gestisce la memoria.

sobes.tech AI

Risposta dell'AI

Nel linguaggio Go viene utilizzato un raccoglitore di garbage (Garbage Collector, GC) automatico, che gestisce la memoria liberando gli oggetti non più utilizzati.

Il meccanismo si basa su un algoritmo di tracciamento e conteggio della raggiungibilità degli oggetti:

  • Go avvia la raccolta dei rifiuti in parallelo con l'esecuzione del programma (GC concorrente).
  • Il GC determina quali oggetti nel heap non sono più raggiungibili dai riferimenti radice (ad esempio, variabili globali, stack delle goroutine).
  • Gli oggetti inaccessibili sono considerati rifiuti e vengono liberati.

Caratteristiche:

  • Go utilizza una raccolta in tre generazioni: mark (marcare gli oggetti raggiungibili), sweep (liberare gli oggetti inaccessibili).
  • La raccolta dei rifiuti minimizza le pause per non bloccare l'esecuzione del programma.
  • La gestione della memoria è automatica, il programmatore non deve liberare esplicitamente la memoria.

Esempio:

func main() {
    s := make([]int, 1000000) // allocazione di memoria
    // utilizzo di s
    s = nil // ora il slice non è più raggiungibile
    // GC libererà la memoria al prossimo avvio
}

In questo modo, Go semplifica la gestione della memoria, riducendo la probabilità di perdite e errori.