Large Object Heap
Large Object Heap (LOH) ve büyük nesne davranışını öğrenirsin.
Large Object Heap (LOH)
Large Object Heap (LOH), yaklaşık 85.000 bayttan büyük nesneleri tutan ayrı bir yığındır. Büyük diziler (byte[100000]) ve büyük string'ler buraya ayrılır.
LOH'daki nesneler doğrudan Gen 2 gibi davranır; Gen 0/1 toplamalarında toplanmaz. Bu yüzden LOH ayırmaları maliyetlidir ve parçalanmaya karşı dikkatli kullanılır.
LOH ve sıkıştırma
Küçük nesne yığını (SOH) toplandığında bellek sıkıştırılır (compaction); boşluklar birleştirilir. LOH'da ise sıkıştırma maliyetli olduğu için genellikle yapılmaz; yalnızca boşluk listesi tutulur.
.NET 4.5.1'den beri GCSettings.LargeObjectHeapCompactionMode = CompactOnce ile bir sonraki toplamada LOH da sıkıştırılabilir. Bu, uzun süre çalışan hizmetlerde parçalanmayı azaltır.
Uygulama LOH kontrolü yap
Main'de byte[] buf = new byte[100000]; ile büyük dizi oluştur. bool isLarge = buf.Length > 85000; ile LOH'a düşüp düşmediğini kontrol et. Console.WriteLine($"LOH: {isLarge}"); yaz.
Örnek çözümü göster
{isLarge}"); yaz.
Örnek çözüm:
using System;
class Program
{
static void Main()
{
byte[] buf = new byte[100000];
bool isLarge = buf.Length > 85000;
Console.WriteLine($"LOH: {isLarge}");
}
}
Kendini test et
-
Bir nesne LOH'a ne zaman gider?
- Her zaman
- Yalnızca struct ise
- Büyüklüğü ~85.000 baytı geçtiğinde
- GC tarafından işaretlendiğinde
Cevabı göster
Büyüklüğü ~85.000 baytı geçtiğinde — Doğru. ~85 KB üstü nesneler LOH'a ayrılır.
-
Yığın türlerini eşleştir
- SOH (Small Object Heap)
- Gen 0/1/2 nesneler
- LOH (Large Object Heap)
- ~85 KB+ nesneler
- LargeObjectHeapCompactionMode
- LOH sıkıştırma
- Gen 2
- Uzun ömürlü nesneler
-
LOH dizisi ayır
byte[] buf = ____ byte[100000];Cevabı göster
byte[] buf = new byte[100000];