Sobes.tech
Middle+

.NET-də Böyük Obrazlar Yığını (Large Object Heap) və Kiçik Obrazlar Yığını (Small Object Heap) bölməsinin məqsədi nədir?

sobes.tech Süni İntellekt

AI-dan cavab

.NET-də LOH və SOH bölmələrinin ayrılması, müxtəlif ölçülü obyektlər üçün yaddaş idarəsini optimallaşdırır.

Small Object Heap (SOH)

  • 85 KB-ə qədər obyektləri saxlayır.
  • Generational Garbage Collection (GC) istifadə edir.
  • Yaxın zamanda yaradılmış obyektlər 0-cı nəsil olur. Sağ qalan obyektlər 1-ci nəsilə, sonra 2-ci nəsilə keçir.
  • Tullantıların toplanması daha tez və kiçik obyektlər üçün daha səmərəlidir.
// SOH-da obyektin yaradılması nümunəsi
string smallString = "Bu kiçik bir sətirdir"; // 85 KB-dən az
object smallObject = new object(); // Kiçik obyekt

Large Object Heap (LOH)

  • 85 KB və yuxarı obyektləri saxlayır.
  • Eyni mənada nəsil deyil. Adətən, yalnız tam tullantıların toplanması zamanı (2-ci nəsil) təmizlənir.
  • LOH-də yaddaş ayırması davamlı yaddaş blokunun axtarışına görə daha yavaş ola bilər.
  • LOH-də parçalanma böyük obyektlərin ayırmasında problemlərə səbəb ola bilər, hətta ümumi sərbəst yaddaş kifayət qədər olsa belə.
  • LOH-də obyektlər standart olaraq GC tərəfindən köçürülmür (.NET Framework 4.5.1 ilə LOH sıxışdırma seçimi təqdim edildi, lakin bu standart olaraq deaktivdir və öz xərcləri var). Bu, böyük məlumatların bahalı köçürülməsini qarşısını alır.
// LOH-də obyektin yaradılması nümunəsi
byte[] largeArray = new byte[100 * 1024]; // Ölçüsü 100 KB > 85 KB

Üstünlüklər

  1. Tullantıların toplanmasının optimallaşdırılması: SOH-də nəsil GC, kiçik və qısa ömürlü obyektlər üçün çox daha səmərəlidir. Obyektləri SOH-ya köçürmək nisbətən sürətlidir.
  2. SOH-də parçalanmanın azaldılması: Böyük obyektlərin köçürülməsi çox bahalı ola bilər və SOH-da ciddi parçalanmaya səbəb olar. Onları ayrıca LOH-ya yerləşdirmək bu problemi həll edir.
  3. Əlavə xərclərin minimallaşdırılması: Böyük obyektləri LOH-ya köçürmək əhəmiyyətli xərclər gətirər. GC tərəfindən köçürülməməsi (standart) bunu qarşısını alır.
  4. Yaddaş ayırma performansının yaxşılaşdırılması: SOH-də ayırma çox tez olur (göstəricilərlə), LOH-də isə uyğun boş blok axtarışı lazım ola bilər. Bu ayrım, çoxlu (kiçik) obyektlər üçün yüksək sürətli ayırmanı qorumağa kömək edir.
Xüsusiyyət Small Object Heap (SOH) Large Object Heap (LOH)
Obyektin ölçüsü 85 KB-yə qədər 85 KB və daha çox
GC modeli Nəsil (0, 1, 2 nəsillər) Non-nəsil (standart)
Obyektlərin köçürülməsi Bəli (kompaktləşdirmə) Xeyr (standart)
Təmizləmə tezliyi Daha tez Daha az (adətən 2-ci nəsil ilə)
Parçalanma riski Aşağı (kompaktlaşdırılır) Yüksək