Junior
Kas ir atkritumu savāktājs (Garbage Collector) C#?
sobes.tech AI
Atbilde no AI
C# atmiņas vākšanas līdzeklis — tas ir .NET izpildes vidē (CLR), kas automātiski pārvalda atmiņu, brīvojot resursus, kas aizņemti ar vairāk nepieejamiem objektiem.
Darba principi:
- Objektu uzraudzība: Vākšanas līdzeklis uzrauga pārvaldāmo kaudzi, kurā ir izveidoti objekti.
- Pieejamības noteikšana: Tas nosaka, kuri objekti ir pieejami izpildes kodam (t. i., tiem ir derīgas saites).
- Nepieejamu objektu vākšana: Objekti, kuri vairs nav pieejami, tiek uzskatīti par "mēteli" un var droši tikt dzēsti.
Mēteles vākšanas process ietver:
- Atzīmēšana (Marking). GC skenē steku un reģistrus, lai atrastu avotus (avota objektus). No avotiem tas izseko objektu grafu, atzīmējot pieejamos objektus.
- Kompaktēšana (Compacting). Tas samazina atmiņas fragmentāciju. GC pārvieto pieejamos objektus uz nepārtrauktu atmiņas bloku, atstājot brīvu vietu.
- Brīvošanu (Sweeping). Nepieejamie objekti (neatzīmētie) tiek dzēsti, un to atmiņa tiek atbrīvota.
Galvenās īpašības:
- Automātiska pārvaldība: Samazina izstrādātāja atbildību par atmiņas brīvošanu.
- Paaudzes (Generations): Kaudze ir sadalīta paaudzēs (Gen 0, Gen 1, Gen 2). Tas optimizē vākšanu, jo lielākā daļa objektu ātri kļūst par mēteli. Ja objekts izdzīvo pēc Gen 0 vākšanas, tas tiek pārvietots uz Gen 1 un tā tālāk.
- Finišatori un iznīcināšana (Finalizers and Disposal): GC garantē, ka
IDisposablerealizējošo objektu finišatori netiek izpildīti nekavējoties. Nepārvaldītu resursu atbrīvošanai jāizmanto skaidrs atbrīvošanas mehānisms (Dispose(),usingizteiksme).
// Piemērs, kā izmantot `using` izteiksmi, lai skaidri atbrīvotu resursus
using (var stream = new System.IO.FileStream("temp.txt", System.IO.FileMode.Create))
{
// Darbs ar failu
} // stream.Dispose() tiks izsaukts automātiski