Share via


Garbage Collection

Aggiornamento: novembre 2007

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 newper 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.

Nota:

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.

Nota importante:

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 pulitura prima che il Garbage Collector recuperi automaticamente la memoria dell'oggetto.

  • Riferimenti deboli
    Vengono descritte le funzionalità che consentono al Garbage Collector di raccogliere un oggetto, senza tuttavia impedire all'applicazione di accedervi.

  • Insiemi indotti
    Viene descritto come recuperare gli oggetti immediatamente o in un secondo momento, quando ritenuto più opportuno.

  • Modalità di latenza
    Vengono descritte le modalità che determinano l'ingerenza del Garbage Collection.

  • Ottimizzazione per l'hosting Web condiviso
    Viene descritto come ottimizzare il Garbage Collection nei server condivisi ospitando alcuni siti Web di piccole dimensioni.

  • Notifiche di Garbage Collection
    Viene descritto come determinare quando si sta per verificare e quando è terminata un'operazione di Garbage Collection completa.

  • Pulitura delle risorse non gestite
    Viene descritta la tecnica di progettazione consigliata per la corretta pulizia delle risorse non gestite.

Riferimenti

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

  • 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.

  • System.IDisposable
    Fornisce la funzionalità per una classe di risorse.

Sezioni correlate