Sobes.tech
Middle

რესურსების სისუფთავის ფაზები მეხსიერების მართვაში?

sobes.tech AI

პასუხი AI-სგან

.NET-ში მეხსიერების მართვა მოიცავს შემდეგ რესურსების სისუფთავის ფაზებს:

  1. მარკირების ფაზა (Marking): გარეჯის აგროვებელი განსაზღვრავს, რომელი ობიექტები არის ხელმისაწვდომი ძირეულ ობიექტებიდან (სტეკის ცვლადები, სტატიკური ცვლადები და რეგისტრები). მიუწვდომელი ობიექტები მონიშნულია შეგროვებისთვის.

  2. ადგილმდებარეობის ფაზა (Relocating/Compacting): ხელმისაწვდომი ობიექტები იწონიან (კომპაქტდება) მეხსიერებაში, გამოყოფენ თანმიმდევრულ სივრცეს და ამცირებენ ფრაგმენტაციას. ამ პროცესში განახლდება გადასატანი ობიექტების მაჩვენებლები. ეს ფაზა მხოლოდ ფონურ რეჟიმს არ განეკუთვნება.

  3. სუფთავების ფაზა (Sweeping): მონიშნული ობიექტების Finalize მეთოდები იძახება, თუ ისინი განსაზღვრულია. შემდეგ, ამ ობიექტების დაკავებული მეხსიერება თავისუფლდება.

Finalize-ის გამოყენების მაგალითი (არასასურველია, უკეთესია გამოიყენოთ IDisposable):

public class ResourceHolder
{
    // რესურსი, რომელიც საჭიროებს გათავისუფლებას
    private System.IO.StreamWriter _writer;

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

    // ფინალიზაციის მეთოდი, რომელიც იძახება გარეჯის აგროვებლით
    ~ResourceHolder()
    {
        // unmanaged რესურსის გათავისუფლება
        _writer?.Dispose();
    }

    // სხვა მეთოდები...
}