Professional Documents
Culture Documents
Il presente articolo stato tradotto manualmente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Pagina 1
http://msdn.microsoft.com/it-it/library/ee787088.aspx
19/10/2012 17.06.22
Pagina 2
La memoria utilizzata dagli oggetti allocati nell'heap gestito supera una soglia accettabile. In altre parole, una soglia di utilizzo della memoria accettabile stata superata nell'heap gestito. Questa soglia viene continuamente modificata durante l'esecuzione del processo. Viene chiamato il metodo GC.Collect. Nella quasi totalit dei casi non necessario chiamare questo metodo, in quanto il Garbage Collector viene eseguito senza interruzioni. Il metodo viene utilizzato principalmente in situazioni eccezionali e per scopi di test. Torna all'inizio
Heap gestito
Dopo essere stato inizializzato da CLR, il Garbage Collector alloca un segmento di memoria per archiviare e gestire oggetti. Questa memoria definita heap gestito, in contrapposizione a un heap nativo presente nel sistema operativo. Per ogni processo gestito esiste un heap gestito. Tutti i thread nel processo allocano gli oggetti nello stesso heap. Per riservare la memoria, il Garbage Collector chiama la funzione VirtualAlloc Win32 e riserva un segmento di memoria per volta per le applicazioni gestite. Il Garbage Collector riserva inoltre i segmenti secondo le esigenze e li rilascia al sistema operativo, dopo aver cancellato tutti gli oggetti, chiamando la funzione VirtualFree Win32. Minore il numero di oggetti allocati nell'heap, minore sar il lavoro del Garbage Collector. Quando si allocano oggetti, non utilizzare valori arrotondati per eccesso che superino le proprie esigenze, ad esempio non allocare una matrice di 32 byte se sono necessari solo 15 byte. Quando viene attivata un'operazione di Garbage Collection, il Garbage Collector recupera la memoria occupata dagli oggetti inutilizzati. Durante il processo di recupero, gli oggetti attivi vengono compattati in modo da poter essere spostati insieme e lo spazio inutilizzato viene rimosso, riducendo le dimensioni dell'heap. In questo modo si garantisce che gli oggetti allocati insieme restino uniti nell'heap gestito, preservandone la vicinanza. L'impatto (frequenza e durata) delle operazioni di Garbage Collection il risultato del volume di allocazioni e della quantit di memoria esclusa nell'heap gestito. L'heap pu essere considerato l'insieme di due heap: l'heap degli oggetti grandi e l'heap degli oggetti piccoli. L'heap degli oggetti grandi contiene oggetti di dimensioni pari o superiori a 85.000 byte. Gli oggetti molto grandi in questo heap sono in genere matrici. raro che un oggetto istanza sia particolarmente grande. Torna all'inizio
Generazioni
L'heap organizzato in generazioni, cos da poter gestire oggetti di lunga durata e di breve durata. Durante un'operazione di Garbage Collection vengono recuperati per primi gli oggetti di breve durata, che in genere occupano solo una piccola parte dell'heap. Esistono tre generazioni di oggetti nell'heap: Generazione 0. la generazione pi recente e contiene oggetti di breve durata. Un esempio di oggetto di breve durata una variabile temporanea. Le operazioni di Garbage Collection vengono eseguite il pi delle volte in questa generazione. Gli oggetti appena allocati formano una nuova generazione di oggetti e sono implicitamente raccolte di generazione 0, a meno che non siano oggetti grandi, nel qual caso vengono inseriti nell'heap degli oggetti grandi in una raccolta di generazione 2. Gran parte degli oggetti vengono recuperati tramite Garbage Collection nella generazione 0 e non passano alla generazione successiva. Generazione 1. Questa generazione contiene oggetti di breve durata e funge da buffer tra gli oggetti di breve durata e gli oggetti di lunga durata. Generazione 2. Questa generazione contiene oggetti di lunga durata. Un esempio di oggetto di lunga durata un oggetto in un'applicazione server contenente dati statici che restano attivi per la durata del processo. Le operazioni di Garbage Collection vengono eseguite in generazioni specifiche a seconda delle condizioni. Raccogliere una generazione significa raccogliere gli oggetti in quella generazione e in tutte le generazioni pi recenti. Un'operazione di Garbage Collection di generazione 2 viene definita completa, in quanto recupera tutti gli oggetti in tutte le generazioni, vale a dire tutti gli oggetti nell'heap gestito.
Esclusione e promozioni
Gli oggetti che non vengono recuperati durante un'operazione di Garbage Collection sono definiti oggetti esclusi e vengono promossi alla generazione successiva. Gli oggetti esclusi da un'operazione di Garbage Collection di generazione 0 vengono promossi alla generazione 1; gli oggetti esclusi da un'operazione di Garbage Collection di generazione 1 vengono promossi alla generazione 2; gli oggetti esclusi da un'operazione di Garbage Collection di generazione 2 restano nella generazione 2. Quando il Garbage Collector rileva un tasso di esclusione elevato in una generazione, aumenta la relativa soglia delle allocazioni, in modo che la raccolta successiva generi un recupero di memoria sostanziale. CLR bilancia continuamente due priorit: impedire che il working set di un'applicazione diventi troppo grande e limitare la durata delle operazioni di Garbage Collection.
http://msdn.microsoft.com/it-it/library/ee787088.aspx
19/10/2012 17.06.22
Pagina 3
Torna all'inizio
http://msdn.microsoft.com/it-it/library/ee787088.aspx
19/10/2012 17.06.22
Pagina 4
http://msdn.microsoft.com/it-it/library/ee787088.aspx
19/10/2012 17.06.22
Pagina 5
Le operazioni di Garbage Collection simultanee dispongono di un working set leggermente pi ampio rispetto alle operazioni non simultanee, in quanto durante la raccolta simultanea possibile allocare oggetti. Tuttavia questo pu influire sulle prestazioni, poich gli oggetti allocati diventano parte del working set. Essenzialmente, la modalit simultanea sacrifica parte della CPU e della memoria in favore di pause pi brevi. Nell'illustrazione riportata di seguito viene mostrata l'esecuzione simultanea di un'operazione di Garbage Collection in un thread dedicato separato. Garbage Collection contemporanea
Torna all'inizio
Nota
Le operazioni di Garbage Collection in background sono disponibili solo in .NET Framework 4 e versioni successive. In .NET Framework 4, supportato solo per la Garbage Collection per workstation. A partire da.NET Framework 4,5, il Garbage Collection in background disponibile sia per la workstation che il Garbage Collection per server. Una raccolta nelle generazioni temporanee durante un'operazione in background definita Garbage Collection in primo piano. Durante l'esecuzione di un'operazione di Garbage Collection in primo piano, tutti i thread gestiti vengono sospesi. Quando in corso un'operazione in background ed stato allocato un numero sufficiente di oggetti nella generazione 0, CLR esegue un'operazione di Garbage Collection in primo piano della generazione 0 o 1. Il thread di Garbage Collection in background dedicato esegue controlli in corrispondenza di punti sicuri frequenti per stabilire se vi sia una richiesta di Garbage Collection in primo piano. In caso affermativo, la raccolta in background si autosospende in modo che possa essere eseguita l'operazione in primo piano. Una volta completata tale operazione, si ha la ripresa del thread di Garbage Collection in background dedicato e dei thread dell'utente. La modalit in background elimina le restrizioni di allocazione imposte dalla modalit simultanea, dal momento che durante un'operazione di Garbage Collection in background possibile eseguire operazioni temporanee. Ci significa che, durante un'operazione di Garbage Collection di generazione 1, la modalit in background in grado di rimuovere gli oggetti inutilizzati nelle generazioni temporanee ed anche espandere l'heap in base alle esigenze. Torna all'inizio
Vedere anche
Altre risorse Garbage Collection
http://msdn.microsoft.com/it-it/library/ee787088.aspx
19/10/2012 17.06.22
Pagina 6
http://msdn.microsoft.com/it-it/library/ee787088.aspx
19/10/2012 17.06.22