Sobes.tech
Middle

Millised on ressursi puhastamise faasid mäluhalduses?

sobes.tech AI

Vastus AI-lt

.NET mäluhaldus hõlmab järgmisi ressursside puhastamise faase:

  1. Märkimisfaas (Marking): Prügikoristaja määrab, millised objektid on juurobjektidest (stakkmuutujad, statilised muutujad ja registrid) kättesaadavad. Mitte-juurobjektid märgitakse kogumiseks.

  2. 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.

  3. Puhastamise faas (Sweeping): Märgitud kogumiseks objektide Finalize meetodid 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...
}