Sobes.tech
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:

  1. 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.
  2. 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.
  3. 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 IDisposable realizē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(), using izteiksme).
// 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