Sobes.tech
Middle+

.NET'te Büyük Nesne Yığını (Large Object Heap) ve Küçük Nesne Yığını (Small Object Heap) ayırmanın amacı nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

NET .NET'te LOH ve SOH bölümlendirmesi, farklı boyuttaki nesneler için bellek yönetimini optimize eder.

Small Object Heap (SOH)

  • 85 KB'ye kadar nesneleri depolar.
  • Generasyonel Çöp Toplayıcıyı (Generational Garbage Collection - GC) kullanır.
  • Yeni oluşturulan nesneler 0. nesile düşer. Hayatta kalan nesneler 1. nesile, sonra 2. nesile taşınır.
  • Çöp toplama daha sık ve küçük nesneler için daha etkilidir.
// SOH'da nesne oluşturma örneği
string smallString = "Bu küçük bir dizedir"; // 85 KB'den az
object smallObject = new object(); // Küçük nesne

Large Object Heap (LOH)

  • 85 KB ve üzeri nesneleri depolar.
  • Aynı anlamda jenerasyonel değildir. Genellikle sadece tam bir çöp toplama (2. nesil) sırasında temizlenir.
  • LOH'da bellek tahsisi, sürekli bir bellek bloğu araması nedeniyle daha yavaş olabilir.
  • LOH'daki parçalanma, büyük nesnelerin tahsisinde sorunlara yol açabilir, toplamda yeterli boş bellek olsa bile.
  • LOH'daki nesneler varsayılan olarak GC tarafından taşınmaz (.NET Framework 4.5.1 ile LOH sıkıştırma seçeneği getirildi, ancak varsayılan olarak devre dışı ve kendi maliyetleri var). Bu, büyük veri kopyalarını maliyetli hale getirir.
// LOH'da nesne oluşturma örneği
byte[] largeArray = new byte[100 * 1024]; // 100 KB > 85 KB

Avantajlar

  1. Çöp toplama optimizasyonu: SOH'daki jenerasyonel GC, küçük ve kısa ömürlü nesneler için çok daha etkilidir. Nesneleri SOH'ya taşımak nispeten hızlıdır.
  2. SOH'daki parçalanmayı azaltma: Büyük nesnelerin taşınması çok maliyetli olur ve SOH'da ciddi parçalanmaya yol açar. Bunları ayrı bir LOH'ye yerleştirmek bu sorunu çözer.
  3. Ek maliyetlerin minimize edilmesi: Büyük nesneleri LOH'ye taşımak önemli maliyetler getirir. GC tarafından taşınmaması (varsayılan) bunu önler.
  4. Bellek tahsisi performansını artırma: SOH'da tahsis genellikle çok hızlıdır (işaretçilerle), LOH'da ise uygun boş bloğu aramak gerekebilir. Bu ayrım, çoğu (küçük) nesne için yüksek hızda tahsisi korumaya yardımcı olur.
Özellik Small Object Heap (SOH) Large Object Heap (LOH)
Nesne Boyutu 85 KB'ye kadar 85 KB ve üzeri
GC Modeli Jenerasyonel (0, 1, 2 nesilleri) Jenerasyonel olmayan (varsayılan)
Nesne Taşıma Evet (sıkıştırma) Hayır (varsayılan)
Temizlik Sıklığı Daha sık Daha az (genellikle 2. nesil ile)
Parçalanma Riski Düşük (sıkıştırılır) Yüksek