Sobes.tech
Middle

Koje su faze čišćenja resursa u upravljanju memorijom?

sobes.tech АИ

Одговор од АИ

Upravljanje memorijom u .NET uključuje sledeće faze čišćenja resursa:

  1. Faza označavanja (Marking): Sakupljač smeća određuje koje objekte su dostupni iz korenskih objekata (promenljive steka, statičke promenljive i registri). Nedostupni objekti se označavaju za sakupljanje.

  2. Faza preseljenja (Relocating/Compacting): Dostupni objekti se pomeraju (kompaktuju) u memoriji, oslobađajući kontinualni prostor i smanjujući fragmentaciju. Tokom ove faze, ažuriraju se pokazivači na preseljene objekte. Ova faza je prisutna samo u verzijama koje nisu u pozadini.

  3. Faza čišćenja (Sweeping): Metode Finalize objekata označenih za sakupljanje se pozivaju, ako su definisane. Zatim se oslobađa memorija koju su zauzeli ti objekti.

Primer korišćenja Finalize (nije preporučljivo, bolje je koristiti IDisposable):

public class ResourceHolder
{
    // Resurs koji zahteva oslobađanje
    private System.IO.StreamWriter _writer;

    public ResourceHolder(string filePath)
    {
        _writer = new System.IO.StreamWriter(filePath);
    }

    // Metod finalizacije, poziva ga sakupljač smeća
    ~ResourceHolder()
    {
        // Oslobađanje neuređenog resursa
        _writer?.Dispose();
    }

    // Drugi metodi klase...
}