CodeBlanks Logo Icon CodeBlanks

Large Object Heap

C# kursu · Uzman · Ders 5/47

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

  1. 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.

  2. 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
  3. LOH dizisi ayır

    byte[] buf = ____ byte[100000];
    Cevabı göster
    byte[] buf = new byte[100000];

Uzman bölümündeki tüm dersler