Garbage Collection (confronto tra C# e Java)

Aggiornamento: novembre 2007

In C e C++ molti oggetti richiedono l'allocazione delle risorse una volta che sono stati dichiarati, in modo da poter essere utilizzati in modo sicuro. Oltre ad allocare le risorse, il programmatore ha il compito di rilasciarle di nuovo al pool di memoria libera dopo che l'oggetto è stato utilizzato. Se le risorse non vengono rilasciate, si verifica una perdita di memoria, poiché viene consumata inutilmente una quantità crescente di risorse. Se invece le risorse vengono rilasciate prima del tempo, possono verificarsi altri problemi, quali la perdita di dati, il danneggiamento di altre aree di memoria ed eccezioni di puntatore null.

Sia in Java che in C# questi rischi vengono evitati mediante la gestione indipendente del ciclo di vita di tutti gli oggetti utilizzati da un'applicazione.

In Java è la Java Virtual Machine (JVM) a liberare la memoria inutilizzata tenendo traccia dei riferimenti alle risorse allocate. Ogni volta che la JVM rileva che non esiste più un riferimento valido a una risorsa, quest'ultima viene sottoposta a Garbage Collection.

In C# la Garbage Collection viene gestita da Common Language Runtime (CLR), con una funzionalità simile a JVM. Il Garbage Collector CLR controlla periodicamente l'heap della memoria per cercare eventuali oggetti privi di riferimento, rilasciando le risorse bloccate da tali oggetti.

Vedere anche

Concetti

Guida per programmatori C#

Gestione automatica della memoria

Altre risorse

Esempi di codici C# per sviluppatori Java