Garbage collection: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Zorro55 (discussione | contributi)
Correzioni SOS in corso
Zorro55 (discussione | contributi)
Correzioni SOS in corso.
Riga 69:
=== Algoritmo di base ===
 
I '''''Tracing collector''''' sono algoritmi dedicati, in quanto sono in grado di tracciare il set di lavoro della memoria, effettuando ciclicamente la raccolta degli oggetti non più necessari in cicli. Un ciclo viene avviato quando il Garbage Collector stabilisce di avere la necessità di recuperare memoria; ciò accade più frequentemente quando il sistema è in memoria bassa. Il metodo originale prevede un '''mark-and-sweep'''<ref>Trad.Ing.:"''Marca e butta via''"</ref> in cui il set di memoria viene più volte analizzato.
 
==== Naïve mark-and-sweep ====
 
Nel ''mark-and-sweep'' ogni oggetto in memoria possiede un [[flag]], (in genere è sufficiente un [[bit)]], riservato esclusivamente per l'utilizzo del Garbage Collector. Quando l'oggetto viene creato, il [[flag]] viene posto comein stato, 'non'flag inclear'' uso<ref name=":0">Trad.Ing.:"''Non (flagin clear)uso''"</ref>. Durante la prima fase, (o '''fase MARK)di Mark''' del ciclo di GCGarbage Collection, viene scorsoscansionato l'intero set di '[[Root (informatica)|root']], ponendo ogni oggetto come 'in uso'stato (di ''flag set).'' <ref name=":1">Trad.Ing.:"''In Uso''"</ref> Tutti gli oggetti accessibili dalla radice del set sono anch'essi contrassegnati come 'in usostato di ''flag set''. <ref name=":1" /> Nella seconda fase, (o '''fase SWEEP)di Sweep''', ogni oggetto in memoria viene ancora una volta esaminato,; quelli che hanno ancora il ''flag clear''non in<ref uso'name=":0" /> non sono raggiungibili da nessun programma o dato, e la loro memoria viene quindi liberata. Per gli oggetti che sono marcati 'inflag uso'set, il flag viene posto ain stato 'non'flag in usoclear'' <ref name=":0" />, preparandoli per il prossimo ciclo di GCGarbage Collection.
 
Questo metodo ha diversi svantaggi, traper i più rilevanti è cheesempio, l'intero sistema viene sospeso durante la GCGarbage Collectio in modo non sempre prevedibile e per periodi di tempo non determinabili a priori; questo tipo di comportamento può creare grossinotevoli problemi in ambienti che necessitano di basse [[Latenza|latenze]] di risposta o in [[Real-time|sistemi real-time]] o mission critical, con possibili malfunzionamenti /, [[deadlock]], /e arresti che possono compromettere l'intero sistema. Inoltre, tutta la memoria di lavoro deve essere esaminata, minimo due volte, causando potenzialmente problemi nei sistemi a [[memoria virtuale|memoria paginata]].
 
==== Tri-colour marking ====
A causa di questi svantaggi gli algoritmi più moderni di ''garbage collection'' attuano delle varianti rispetto a semplici meccanismi, quali il ''mark-and-sweep'', applicando algoritmi del tipo '''tri-colour marking'''. L'algoritmo effettua marcature su tre diversi livelli secondo le seguenti fasi:
 
# '''Crea set di livelli di bianco, grigio e nero''' utilizzati per segnare i vari progressi effettuati durante il ciclo.