Junior
Чӣ тавр ҷамъкунандаи партовҳо (Garbage Collector) дар C#?
sobes.tech AI
Ҷавоб аз AI
C#-да қоқыс жинағышы .NET іске қосу ортасының (CLR) бір бөлігі болып табылады және автоматты түрде жадыны басқару арқылы қол жетімсіз объектілердің пайдаланып жатқан ресурстарын босатады.
Жұмыс принциптері:
- Объектілерді бақылау: Қоқыс жинағыш басқарылатын heap-те жасалған объектілерді бақылайды.
- Қол жетімділікті анықтау: Қандай объектілердің қол жетімді екенін анықтайды (яғни, жарамды сілтемелер бар).
- Қол жетімсіз объектілерді жинау: Қол жетімсіз объектілер "қоқыс" ретінде қарастырылады және қауіпсіз түрде жойылуы мүмкін.
Жинау процесі келесілерді қамтиды:
- Белгілеу (Marking). GC стек пен тіркеушілерді сканерлеп, тамырларды (тамыр объектілерін) табады. Тамырлардан бастап, ол объектілер графын айналып, қол жетімді объектілерді белгілейді.
- Компактизация (Compacting). Жадының фрагментациясын азайтады. GC қол жетімді объектілерді үздіксіз жады блогына көшіріп, бос орын қалдырады.
- Тазалау (Sweeping). Қол жетімсіз объектілер (белгіленбегендер) жойылады және олардың жады босатылады.
Негізгі ерекшеліктер:
- Автоматты басқару: Дамытушының жадыны босату бойынша қолмен жауапкершілігін жояды.
- Жасақтар: Heap жасақтарға бөлінген (Gen 0, Gen 1, Gen 2). Бұл жинауды оңтайландырады, себебі көп объектілер тез қоқысқа айналады. Жаңа объектілер Gen 0-да жасалады. Егер объект Gen 0 жинауынан кейін өмір сүрсе, ол Gen 1-ге көшіріледі және т.б.
- Финализаторлар және босату (Finalizers and Disposal): GC
IDisposableжүзеге асырған объектілер үшін финализаторлардың дереу орындалуын кепілдендірмейді. Басқарылмайтын ресурстарды босату үшін нақты механизм қолданылуы керек (Dispose(),usingмәлімдемесі).
// Ресурстарды нақты босату үшін using мәлімдемесін қолдану мысалы
using (var stream = new System.IO.FileStream("temp.txt", System.IO.FileMode.Create))
{
// Файлмен жұмыс
} // stream.Dispose() автоматты түрде шақырылады