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
- 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.
- 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.
- Qo'shimcha xarajatlarni minimallashtirish: Katta ob'ektlarni LOH ga ko'chirish katta xarajatlar keltiradi. GC tomonidan ko'chirilmasligi (standart) buni oldini oladi.
- 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 |