Per Garbage Collection (letteralmente raccolta dei rifiuti, a volte abbreviato con GC) si intende una modalità automatica di gestione della memoria, mediante la quale un sistema operativo, o un compilatore e un modulo di run-time, liberano le porzioni di memoria che non dovranno più essere successivamente utilizzate dalle applicazioni.
In altre parole, il garbage collector annoterà le aree di memoria che non sono più referenziate, cioè allocate da un processo attivo, e le libererà automaticamente. Il Garbage Collection è stato inventato da John McCarthy intorno al 1959 per il linguaggio di programmazione Lisp.
Questo meccanismo porta ad un notevole cambio nello stile di programmazione dei linguaggi che lo implementano. Infatti non è più possibile richiedere esplicitamente di liberare la memoria utilizzata da un oggetto, ovvero terminare tale oggetto in modo deterministico, ma si lascia che il sistema esegua questa operazione automaticamente, nel momento in cui lo riterrà più opportuno per migliorare le prestazioni complessive (finalizzazione non deterministica).
Per la gestione della memoria si tiene conto di due principi fondamentali:
- trovare gli oggetti in un programma ai quali non sarà più possibile accedere in futuro;
- recuperare le risorse che sono state utilizzate da questi oggetti.
Attuando questo processo il programmatore non deve più preoccuparsi di gestire la memoria manualmente, specificando quali oggetti rilasciare poiché non più necessari e che possono consumare una quantità significativa di spazio. Questo processo aiuta anche i programmatori nel rendere più stabili i programmi, in quanto vengono limitati errori di run-time nelle varie classi, ad esempio impedisce errori puntatore (quando quest'ultimo punta alla locazione di memoria dove era presente l'oggetto, anche se questo è stato poi eliminato, la locazione quindi potrebbe essere utilizzata per altri scopi. Ciò può portare ad errori di violazione di stoccaggio che sono estremamente difficili da risolvere).
Alcuni linguaggi di programmazione, come il Java, il Python e il C# (.NET), hanno un sistema di garbage collection integrato, mentre per altri linguaggi, come il C e il C++, la sua eventuale implementazione è a carico del programmatore.
Tuttavia molti linguaggi usano una combinazione dei due approcci, come Ada, Modula-3 e CLI che sono garbage collection, ma consentono all'utente di eliminare manualmente gli oggetti o volendo velocizzare il processo, disattivare il GC. In ogni caso è più efficace attuare la raccolta durante la fase di compilazione del linguaggio. Il Garbage collection è quasi sempre strettamente integrato con l'allocazione di memoria.
I vantaggi del linguaggio sono la modernità e la velocità, i sorgenti infatti passano per un generatore di codice C utilizzando il sistema GObject, questo codice può essere rivisto e corretto manualmente, successivamente il codice viene poi compilato tramite GCC in modo tale che gli eseguibili siano supportati in modo nativo.
Il linguaggio è utilizzabile su Linux, ma esiste già un port per Windows. Esiste un dialetto del linguaggio in stile Python chiamato genie.
Versioni:
24/06/2012: Vala 0.17.2
23/06/2012: Vala 0.16.1
02/06/2012: Vala 0.17.1
28/04/2012: Vala 0.17.0
26/03/2012: Vala 0.16.0
Se ti è piaciuto l'articolo , iscriviti al feed cliccando sull'immagine sottostante per tenerti sempre aggiornato sui nuovi contenuti del blog: