Jaké jsou fáze čištění zdrojů v řízení paměti?
sobes.tech AI
Odpověď od AI
Správa paměti v .NET zahrnuje následující fáze čištění zdrojů:
-
Fáze označování (Marking): Sběrač odpadků určuje, které objekty jsou dostupné z kořenových objektů (proměnné zásobníku, statické proměnné a registry). Nedostupné objekty jsou označeny k odstranění.
-
Fáze přesunu (Relocating/Compacting): Přístupné objekty jsou přesouvány (kompaktně uloženy) v paměti, čímž se uvolní souvislý prostor a sníží fragmentace. Během této fáze jsou aktualizovány ukazatele na přesunuté objekty. Tato fáze je přítomna pouze v sestaveních mimo režim pozadí.
-
Fáze úklidu (Sweeping): Volají se metody
Finalizeobjektů označených k odstranění, pokud jsou definovány. Poté je uvolněna paměť obsazená těmito objekty.
Příklad použití Finalize (nedoporučuje se, je lepší používat IDisposable):
public class ResourceHolder
{
// Zdroj, který je třeba uvolnit
private System.IO.StreamWriter _writer;
public ResourceHolder(string filePath)
{
_writer = new System.IO.StreamWriter(filePath);
}
// Metoda finalizace, volaná garbage collectorem
~ResourceHolder()
{
// Uvolnění neřízeného zdroje
_writer?.Dispose();
}
// Další metody třídy...
}