Guida per gli sviluppatori di .NET Framework
Garbage Collection

Il Garbage Collector di .NET Framework gestisce tutte le allocazioni e i rilasci di memoria di un'applicazione. Ogni volta che si utilizza l'operatore new per creare un oggetto, il runtime alloca per l'oggetto una parte dell'heap gestito. Finché nell'heap gestito resta spazio di indirizzamento libero, il runtime continua ad allocare memoria per i nuovi oggetti. La memoria, però, non è infinita. A un certo punto, è necessario che venga eseguita una Garbage Collection al fine di liberare memoria. Il motore di ottimizzazione del Garbage Collector individua il momento migliore per effettuare la Garbage Collection in base alle allocazioni in corso. Quando il Garbage Collector effettua una scansione, cerca tra gli oggetti contenuti nell'heap gestito quelli non più utilizzati dall'applicazione e compie le necessarie operazioni per reclamare la memoria da essi occupata.

In questa sezione viene descritto in che modo il Garbage Collector gestisce l'allocazione e il rilascio di memoria per gli oggetti gestiti di un'applicazione. Viene inoltre descritta la tecnica di progettazione consigliata per la corretta pulizia delle risorse non gestite create dalla propria applicazione.

NoteNota

In .NET Framework versione 1.0 Common Language Runtime dispone di un gestore della memoria separato per l'heap degli oggetti grandi. In alcune circostanze questo gestore non restituisce la memoria inutilizzata al sistema operativo e in alcuni casi non la rende disponibile per la Garbage Collection. Pertanto, a causa della frammentazione dello spazio di indirizzi virtuali, l'allocazione della memoria ha esito negativo. In .NET Framework versioni 1.1 e 2.0 l'heap degli oggetti grandi è costituito da aree contigue di memoria denominate segmenti heap, correttamente allineati per ridurre al minimo la frammentazione della memoria virtuale. Durante la Garbage Collection, lo spazio richiesto per gli oggetti di grandi dimensioni viene consolidato e inserito in un elenco di disponibilità. I segmenti heap in cui sono contenuti solo elementi dell'elenco di disponibilità vengono liberati e la memoria viene restituita al sistema operativo. Grazie a tali modifiche dell'heap degli oggetti di grandi dimensioni, sono stati efficacemente eliminati gli errori di allocazione della memoria dovuti a questo tipo di frammentazione dello spazio di indirizzi virtuali.

NoteImportante

Nei server con più di 2 GB di memoria può essere necessario specificare l'opzione /3GB per evitare problemi apparenti di memoria insufficiente quando nel sistema la memoria è invece ancora disponibile.

In questa sezione

Conoscenze degli sviluppatori in materia di gestione della memoria

Vengono descritti i correttivi che gli sviluppatori Visual Basic, C++ e COM dovrebbero porre in essere nel migrare al codice gestito.

Metodi Finalize e distruttori

Viene descritto in che modo i metodi Finalize e i distruttori consentono a un oggetto di svolgere le necessarie operazioni di pulizia prima che il Garbage Collector reclami automaticamente la memoria dell'oggetto.

Pulizia delle risorse non gestite

Viene descritta la tecnica di progettazione consigliata per la corretta pulizia delle risorse non gestite. Nella sezione vengono forniti esempi di codice relativi alle seguenti attività:

Esecuzione immediata di una Garbage Collection

Viene descritto come e quando imporre al Garbage Collector di eseguire immediatamente una Garbage Collection.

Sezioni correlate

Classe GC

Fornisce metodi che permettono di interagire con il Garbage Collector di sistema.

Metodo Object.Finalize

Consente a un oggetto di tentare il rilascio delle risorse e di eseguire altre operazioni di pulizia prima che intervenga il Garbage Collector.

Interfaccia IDisposable

Fornisce la funzionalità per una classe di risorse.

Esempio di tecnologia Garbage Collection

Viene fornita una panoramica sulle funzionalità del Garbage Collector di .NET Framework.

Tag :


Page view tracker