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.
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. |
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
Sezioni correlate