Sobes.tech
Middle

Bellek yönetiminde kaynak temizleme aşamaları nelerdir?

sobes.tech yapay zeka

AI'dan gelen yanıt

.NET'teki bellek yönetimi, kaynak temizleme aşamalarını içerir:

  1. İşaretleme aşaması (Marking): Çöp toplayıcı, kök nesnelerden (yığın değişkenleri, statik değişkenler ve kayıtlar) erişilebilir olan nesneleri belirler. Erişilemeyen nesneler, toplanmak üzere işaretlenir.

  2. Taşıma (Yerleştirme/Sıkıştırma) aşaması (Relocating/Compacting): Erişilebilir nesneler, bellek içinde hareket ettirilir (sıkıştırılır), böylece ardışık alan boşaltılır ve parçalanma azaltılır. Bu aşamada, taşınan nesnelere işaretçiler güncellenir. Bu aşama, arka plan olmayan derlemelerde bulunur.

  3. Temizlik aşaması (Sweeping): Toplama için işaretlenmiş nesnelerin Finalize metodları çağrılır, eğer tanımlanmışsa. Ardından, bu nesnelerin kapladığı bellek serbest bırakılır.

Finalize kullanımına örnek (tavsiye edilmez, IDisposable kullanmak daha iyidir):

public class ResourceHolder
{
    // Serbest bırakılması gereken kaynak
    private System.IO.StreamWriter _writer;

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

    // Çöp toplayıcı tarafından çağrılan finalizasyon metodu
    ~ResourceHolder()
    {
        // Yönetilmeyen kaynağı serbest bırak
        _writer?.Dispose();
    }

    // Diğer sınıf metodları...
}