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