Sobes.tech
Middle+

Ինչու է անհրաժեշտ բաժանել մեծ օբյեկտների heap-ը (Large Object Heap) և փոքր օբյեկտների heap-ը (Small Object Heap) .NET-ում?

sobes.tech AI

Պատասխան AI-ից

LOH և SOH հողակտորների բաժանումը օպտիմալացնում է հիշողության կառավարումը տարբեր չափերի օբյեկտների համար:

Small Object Heap (SOH)

  • Պահպանում է մինչև 85 ԿԲ չափով օբյեկտներ:
  • Օգտագործում է սերնդային աղբահավաք (Generational Garbage Collection - GC):
  • Վերջին ժամանակներում ստեղծված օբյեկտները գտնվում են 0-րդ սերնդում: Զինված օբյեկտները տեղափոխվում են 1-ին, ապա 2-րդ սերնդ:
  • Աղբահավաքը հաճախ է և ավելի արդյունավետ փոքր օբյեկտների համար:
// Օրինակ SOH-ում օբյեկտ ստեղծելու
string smallString = "Սա փոքր տող է"; // Ավելի քիչ, քան 85 ԿԲ
object smallObject = new object(); // Փոքր օբյեկտ

Large Object Heap (LOH)

  • Պահպանում է 85 ԿԲ և ավելի մեծ օբյեկտներ:
  • Չի հանդիսանում սերնդային, ինչպես SOH. Սովորաբար մաքրվում է միայն ամբողջական աղբահավաքի ժամանակ (2-րդ սերունդ):
  • Հիշողության հատկացմանը LOH-ում կարող է տևել ավելի երկար, քանի որ որոնում է շարունակական հիշողության բլոկ:
  • LOH-ի ֆրագմենտացիան կարող է առաջացնել մեծ օբյեկտների հատկացման խնդիրներ, նույնիսկ եթե ընդհանուր ազատ հիշողությունը բավարար է:
  • LOH-ի օբյեկտները ըստ նախնական կարգավորումների չեն տեղափոխվում GC-ի կողմից (с .NET Framework 4.5.1 հնարավոր է սեղմել LOH-ը, բայց դա անջատված է ըստ նախնական կարգավորումների և ունի իր ծախսերը): Սա կանխում է մեծ տվյալների թանկարժեք պատճենումը:
// Օրինակ LOH-ում օբյեկտ ստեղծելու
byte[] largeArray = new byte[100 * 1024]; // չափը 100 ԿԲ > 85 ԿԲ

Առավելություններ բաժանման

  1. Աղբահավաքի օպտիմալացում: Սերնդային GC-ը շատ ավելի արդյունավետ է փոքր, կարճաժամկետ օբյեկտների համար SOH-ում: Օբյեկտների տեղափոխումը SOH-ում արագ է:
  2. SOH-ի ֆրագմենտացիայի նվազեցում: Մեծ օբյեկտների տեղափոխումը շատ թանկ է և կարող է հանգեցնել ուժեղ ֆրագմենտացիայի: Դրանք առանձին LOH հողակտորում տեղադրելը լուծում է այդ խնդիրը:
  3. Ավելի քիչ ծախսեր: Մեծ օբյեկտների տեղափոխումը LOH-ում մեծ ծախսեր է առաջացնում: Նախնական GC-ը դրանք չի տեղափոխում, ինչը խուսափում է այդ ծախսերից:
  4. Հիշողության հատկացման արագության բարելավում: SOH-ում հատկացումը հաճախ շատ արագ է (նշանակատուի միջոցով), մինչդեռ LOH-ում անհրաժեշտ է որոնել համապատասխան ազատ բլոկ:
Գծագրություն Small Object Heap (SOH) Large Object Heap (LOH)
Օբյեկտի չափը Մինչև 85 ԿԲ 85 ԿԲ և ավելի
GC մոդելը Սերնդային (0, 1, 2 սերունդներ) Չի սերնդային (առանցքային)
Օբյեկտների տեղափոխում Այո (սեղմում) Ոչ (առանցքային)
Մաքրման հաճախականությունը Ավելի հաճախ Փոքր հաճախականությամբ (հաճախ 2-րդ սերնդով)
Ֆրագմենտացիայի ռիսկը Ներքև (սեղմում) Բարձր