Sobes.tech
Senior

Obyektlərin yığınlarda bölünməsi necə həyata keçirilir?

sobes.tech Süni İntellekt

AI-dan cavab

.NET-də, yığım (heap) iki əsas nəsil üzrə bölünür: Nəsil 0 və Nəsil 1. Əgər lazım olsa, Nəsil 2 yaradılır.

  • Nəsil 0 (Gen 0): Yeni yaradılmış obyektlər burada yerləşir. Bu ən gənc və ən kiçik nəsildir. Tullantıların toplanıcısı (GC) bu nəsili daha çox yoxlayır və təmizləyir. Gen 0-da qalan obyektlər Gen 1-ə köçürülür.
  • Nəsil 1 (Gen 1): Gen 0-da toplanmış obyektləri ehtiva edir. GC bu nəsili Gen 0-dan daha az yoxlayır. Gen 1-də qalan obyektlər Gen 2-ə köçürülür.
  • Nəsil 2 (Gen 2): Gen 1-dən uzunömürlü obyektləri və böyük obyektləri ehtiva edir. GC bu nəsili ən az yoxlayır. Gen 2-də toplanma ən çox vaxt alır.
  • Böyük Obyekt Yığını (LOH): 85 KB və daha böyük obyektlər üçün xüsusi sahədir. LOH-dəki obyektlər GC tərəfindən köçürülmür, çünki onların köçürülməsi çox bahalıdır. LOH-in təmizlənməsi Gen 2 ilə birlikdə həyata keçirilir.

Nəsil bölünməsi, yeni yaradılmış obyektlərin daha sürətli tullantıya çevrilməsi ehtimalına əsaslanır. Bu yanaşma GC-ə yaddaşı səmərəli təmizləməyə imkan verir və ən gənc nəsil obyektlərinə diqqət yetirir.

// Nəsil 0-da obyektlərin yaradılması nümunəsi
object obj1 = new object();
string str1 = "Hello";

// Birinci tullantı toplama sonrası, əgər obj1 və str1 hələ lazımdırsa,
// onlar Nəsil 1-ə köçürülə bilər.

// Uzunömürlü obyekt
List<int> longLivedList = new List<int>();
for (int i = 0; i < 1000; i++)
{
    longLivedList.Add(i);
}
// Bu siyahı zamanla Nəsil 2-yə yüksələ bilər.

// Böyük obyekt, LOH-ə yerləşdiriləcək
byte[] largeArray = new byte[100 * 1024]; // Ölçüsü > 85 KB