Junior
Ի՞նչ է garbage collector-ը (մաքրման հավաքիչը) C#-ում։
sobes.tech AI
Պատասխան AI-ից
C#-ի աղբամանի հավաքողը .NET գործարկման միջավայրի (CLR) մաս է, որը ավտոմատ կերպով կառավարում է հիշողությունը՝ ազատելով ռեսուրսները, որոնք զբաղեցրած են արդեն հասանելի olmayan օբյեկտների կողմից:
Աշխատանքի սկզբունքները՝
- Օբյեկտների հետևում: Աղբամանի հավաքողը հետևում է կառավարվող heap-ում ստեղծված օբյեկտներին:
- Հասանելիության որոշում: Որոշում է, թե որ օբյեկտները հասանելի են գործարկվող կոդից (այսինքն՝ ունեն վավեր հղումներ):
- Հասանելի olmayan օբյեկտների հավաքում: Ավելին, հասանելի olmayan օբյեկտները համարվում են "մաքուր" և կարող են անվտանգ հեռացվել:
Հավաքման գործընթացը ներառում է՝
- Նշում (Marking): GC- ն սկանավորում է stack-ը և գրանցումները՝ գտնելու արմատները (արմատային օբյեկտները): Արծաթից սկսած՝ անցնում է օբյեկտների գրաֆը և նշում է հասանելի օբյեկտները:
- Կոմպակտում (Compacting): Օգնում է նվազեցնել հիշողության ֆրագմենտացիան։ GC- ն տեղափոխում է հասանելի օբյեկտները միացյալ հիշողության բլոկի մեջ՝ թողնելով ազատ տարածք:
- Մաքառում (Sweeping): Անհասանելի օբյեկտները (չնշվածները) հեռացվում են, և նրանց հիշողությունը ազատվում:
Հիմնական առանձնահատկությունները՝
- Ավտոմատ կառավարում: Հեռացնում է ծրագրավորողի ձեռքով պատասխանատվությունը հիշողությունը ազատելու համար:
- Ենթամիջավայրեր: Heap-ը բաժանված է ենթամիջավայրերի (Gen 0, Gen 1, Gen 2): Սա օպտիմալացնում է հավաքումը, քանի որ մեծ մասը օբյեկտների արագ մաքրվում է։ Նոր օբյեկտները ստեղծվում են Gen 0-ում։ Եթե օբյեկտը survives է 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() կկոչվի ավտոմատ