Millised on ressursi puhastamise faasid mäluhalduses?
sobes.tech AI
Vastus AI-lt
.NET mäluhaldus hõlmab järgmisi ressursside puhastamise faase:
-
Märkimisfaas (Marking): Prügikoristaja määrab, millised objektid on juurobjektidest (stakkmuutujad, statilised muutujad ja registrid) kättesaadavad. Mitte-juurobjektid märgitakse kogumiseks.
-
Liigutamise faas (Relocating/Compacting): Juurobjektid liigutatakse (kokkusurutakse) mälus, vabastades järjestikuse ruumi ja vähendades fragmentatsiooni. Selle faasi käigus uuendatakse viitajaid liigutatud objektidele. See faas on ainult taustavälise ehituse puhul.
-
Puhastamise faas (Sweeping): Märgitud kogumiseks objektide
Finalizemeetodid kutsutakse välja, kui need on määratletud. Seejärel vabastatakse nende objektide poolt hõivatud mälu.
Näide Finalize kasutamisest (ei soovitata, parem on kasutada IDisposable):
public class ResourceHolder
{
// Ressurss, mida tuleb vabastada
private System.IO.StreamWriter _writer;
public ResourceHolder(string filePath)
{
_writer = new System.IO.StreamWriter(filePath);
}
// Finaliseerimismeetod, kutsutakse välja prügikoristaja poolt
~ResourceHolder()
{
// Mitte-haldatava ressursi vabastamine
_writer?.Dispose();
}
// Muud klassi meetodid...
}