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