Sobes.tech
Senior

Yığınlarda nesnelerin bölünmesi nasıl gerçekleşir?

sobes.tech yapay zeka

AI'dan gelen yanıt

.NET'te, heap (yığın) iki ana nesil halinde bölünmüştür: Nesil 0 ve Nesil 1. Gerekirse, Nesil 2 oluşturulur.

  • Nesil 0 (Gen 0): Yeni oluşturulan nesneler burada yer alır. Bu en genç ve en küçük yığındır. Çöp toplayıcı (GC) bu nesli daha sık kontrol eder ve temizler. Gen 0'daki nesiller, Gen 1'e taşınır.
  • Nesil 1 (Gen 1): Gen 0'ta toplanan nesneleri içerir. GC, bu nesli Gen 0'dan daha az sıklıkla kontrol eder. Gen 1'de toplanan nesneler, Gen 2'ye taşınır.
  • Nesil 2 (Gen 2): Gen 1'den uzun ömürlü nesneleri ve büyük nesneleri içerir. GC, bu nesli en nadir kontrol eder. Gen 2'de toplanma en maliyetlidir.
  • Büyük Nesne Yığını (LOH): 85 KB veya daha büyük nesneler için özel bir yığın alanıdır. LOH'daki nesneler, taşınmaları çok maliyetli olduğu için GC tarafından taşınmaz. LOH temizliği, Gen 2 toplanmasıyla birlikte gerçekleşir.

Nesil ayrımı, yeni oluşturulan nesnelerin, uzun ömürlü nesnelerden daha hızlı çöp haline gelme eğiliminde olduğu hipotezine dayanır. Bu yaklaşım, GC'nin belleği etkin bir şekilde temizlemesine olanak tanır ve en genç nesillere odaklanır.

// Nesil 0'da nesne oluşturma örneği
object obj1 = new object();
string str1 = "Hello";

// Gen 0'da ilk çöp toplama sonrası, eğer obj1 ve str1 hâlâ gerekiyorsa,
// bunlar Gen 1'e taşınabilir.

// Uzun ömürlü nesne
List<int> longLivedList = new List<int>();
for (int i = 0; i < 1000; i++)
{
    longLivedList.Add(i);
}
// Bu liste zamanla Gen 2'ye yükselebilir.

// Büyük nesne, LOH'ye yerleştirilecek
byte[] largeArray = new byte[100 * 1024]; // Boyut > 85 KB