Sobes.tech
Junior

Šta je sakupljač smeća u C#?

sobes.tech АИ

Одговор од АИ

Garbage collector u C# je automatizovani proces upravljanja memorijom. On oslobađa memoriju koju zauzimaju objekti koji više nisu u upotrebi od strane aplikacije.

Ključni aspekti:

  • Automatsko upravljanje: Programer ne mora ručno da dodeljuje ili oslobađa memoriju za većinu objekata. CLR (Common Language Runtime) to radi automatski.
  • Praćenje referenci: Garbage collector određuje koje objekte su dostupni iz izvora korena (npr. stekovi niti, statička polja). Objekti bez referenci iz ovih izvora smatraju se nedostupnim i sakupljaju se.
  • Generacije: Heap (hrpa) je podeljen na generacije (0, 1 i 2). Objekti koji "prežive" nakon sakupljanja se premeštaju u više generacije. Ovo optimizuje proces, jer većina objekata živi kratko.
  • Finalizacija: Objekti mogu imati metodu Finalize, koju poziva garbage collector pre oslobađanja memorije. Koristi se za čišćenje neuređenih resursa, ali je njena upotreba ograničena zbog nepredvidivog vremena izvršenja.
  • Kompaktiranje: Nakon sakupljanja, garbage collector može pomerati preživela objekta radi smanjenja fragmentacije memorije.
// Primer kreiranja objekta na upravljanom heap-u
MyClass obj = new MyClass();
// Kada više nema referenci na obj, garbage collector može osloboditi memoriju

// Primer ručnog oslobađanja neuređenih resursa pomoću IDisposable i using
// Preporučeni pristup umesto Finalize
using (var resource = new UnmanagedResourceWrapper())
{
    // Korišćenje resursa
} // Ovde se poziva resource.Dispose(), čisteći neuređeni resurs