Aké sú fázy čistenia zdrojov v správe pamäte?
sobes.tech AI
Odpoveď od AI
Správa pamäte v .NET zahŕňa nasledujúce fázy čistenia zdrojov:
-
Fáza označovania (Marking): Zberač odpadu určuje, ktoré objekty sú dostupné z koreňových objektov (premenné zásobníka, statické premenné a registre). Nedostupné objekty sú označené na zbierku.
-
Fáza presunu (Relocating/Compacting): Dostupné objekty sa presúvajú (konsolidujú) v pamäti, čím sa uvoľní súvislý priestor a zníži fragmentácia. Počas tejto fázy sa aktualizujú ukazovatele na presunuté objekty. Táto fáza je prítomná iba v zostavách mimo režimu na pozadí.
-
Fáza upratovania (Sweeping): Metódy
Finalizeobjektov označených na zbierku sa volajú, ak sú definované. Následne sa uvoľní pamäť obsadená týmito objektmi.
Príklad použitia Finalize (neodporúča sa, je lepšie používať IDisposable):
public class ResourceHolder
{
// Zdroj, ktorý vyžaduje uvoľnenie
private System.IO.StreamWriter _writer;
public ResourceHolder(string filePath)
{
_writer = new System.IO.StreamWriter(filePath);
}
// Metóda finalizácie, volaná garbage collectorem
~ResourceHolder()
{
// Uvoľnenie neovládaného zdroja
_writer?.Dispose();
}
// Iné metódy triedy...
}