Sobes.tech
Middle+

.NETda katta ob'ektlar (Large Object Heap) va kichik ob'ektlar (Small Object Heap) uchun ajratish nima uchun kerak?

sobes.tech AI

AIdan javob

NET .NET'da LOH va SOH bo'linishi, turli o'lchamdagi ob'ektlar uchun xotira boshqaruvini optimallashtiradi.

Small Object Heap (SOH)

  • 85 KB gacha bo'lgan ob'ektlarni saqlaydi.
  • Generatsion axlat yig'uvchi (Generational Garbage Collection - GC) dan foydalanadi.
  • Yangi yaratilgan ob'ektlar 0-chi avlodga tushadi. Qolgan ob'ektlar 1-chi avlodga, keyin 2-chi avlodga o'tadi.
  • Axlat yig'ish ko'proq va kichik ob'ektlar uchun samaraliroq bo'ladi.
// SOH'da ob'ekt yaratish misoli
string smallString = "Bu kichik satr"; // 85 KB dan kam
object smallObject = new object(); // Kichik ob'ekt

Large Object Heap (LOH)

  • 85 KB va undan katta ob'ektlarni saqlaydi.
  • Bu generatsion emas. Odatda, faqat to'liq axlat yig'ish (2-chi avlod) paytida tozalanadi.
  • LOH'da xotira ajratish sekinroq bo'lishi mumkin, chunki uzluksiz xotira blokini qidirish kerak.
  • LOH'dagi parchalanish katta ob'ektlarni ajratishda muammo tug'dirishi mumkin, hatto umumiy bo'sh xotira yetarli bo'lsa ham.
  • LOH'dagi ob'ektlar odatda GC tomonidan harakatlanmaydi (.NET Framework 4.5.1 bilan LOH siqishni yoqish imkoniyati kiritildi, ammo bu standart holatda o'chirilgan va o'z xarajatlari bor). Bu katta ma'lumotlarni ko'chirishni qimmatga tushirmaydi.
// LOH'da ob'ekt yaratish misoli
byte[] largeArray = new byte[100 * 1024]; // 100 KB > 85 KB

Afzalliklari

  1. Axlat yig'ishni optimallashtirish: SOH'dagi generatsion GC kichik va qisqa muddatli ob'ektlar uchun juda samarali. Ob'ektlarni SOH ga ko'chirish nisbatan tez.
  2. SOH parchalanishini kamaytirish: Katta ob'ektlarni ko'chirish juda qimmat bo'ladi va SOHda kuchli parchalanishga olib keladi. Ularni alohida LOH ga joylashtirish bu muammoni hal qiladi.
  3. Qo'shimcha xarajatlarni minimallashtirish: Katta ob'ektlarni LOH ga ko'chirish katta xarajatlar keltiradi. GC tomonidan ko'chirilmasligi (standart) buni oldini oladi.
  4. Xotira ajratish tezligini oshirish: SOH'da ajratish odatda juda tez (ko'rsatkichlar yordamida), LOH'da esa mos bo'sh blokni qidirish talab qilinishi mumkin. Bu ajratishni yuqori tezlikda saqlashga yordam beradi.
Xususiyat Small Object Heap (SOH) Large Object Heap (LOH)
Ob'ektning o'lchami 85 KB gacha 85 KB va undan katta
GC modeli Generatsion (0, 1, 2 avlodlar) Non-generatsion (standart)
Ob'ektlarni ko'chirish Ha (siqishtirish) Yo'q (standart)
Tozalash chastotasi Ko'proq Kamroq (odatda 2-chi avlod bilan)
Parchalanish xavfi Past (siqishtiriladi) Yuqori