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:
-
İş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.
-
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.
-
Temizlik aşaması (Sweeping): Toplama için işaretlenmiş nesnelerin
Finalizemetodları ç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ı...
}