Junior
Τι είναι ο συλλέκτης απορριμμάτων (Garbage Collector) στη C#;
sobes.tech AI
Απάντηση από AI
Μηχανισμός αυτόματης διαχείρισης μνήμης που ελευθερώνει τη μνήμη που καταλαμβάνεται από αντικείμενα στα οποία δεν υπάρχουν πλέον αναφορές. Αυτό αποτρέπει διαρροές μνήμης και απλοποιεί τη διαδικασία ανάπτυξης.
Αρχές λειτουργίας του συλλέκτη απορριμμάτων:
- Παρακολούθηση αντικειμένων: Προσδιορίζει τα αντικείμενα που είναι ακόμα προσβάσιμα από τους ριζικούς κόμβους (στατικά πεδία, τοπικές μεταβλητές στη στοίβα).
- Συλλογή απορριμμάτων: Αν ένα αντικείμενο δεν έχει αναφορές, ο συλλέκτης το σημαδεύει για διαγραφή.
- Απελευθέρωση μνήμης: Απελευθερώνει τη μνήμη που καταλαμβάνεται από διαγραμμένα αντικείμενα και συμπιέζει την υπόλοιπη μνήμη για μείωση της κατακερματισμού.
Γενιές αντικειμένων:
- Γενιά 0: Περιέχει πρόσφατα δημιουργημένα και σύντομης διάρκειας αντικείμενα. Η συλλογή γίνεται συχνά.
- Γενιά 1: Περιέχει αντικείμενα που επιβίωσαν από συλλογή γενιάς 0. Η συλλογή γίνεται σπανιότερα.
- Γενιά 2: Περιέχει μακροχρόνια αντικείμενα. Η συλλογή γίνεται σπάνια.
Επιτακτική κλήση GC (σπάνια και με προσοχή):
// Επιτακτική κλήση συλλογής απορριμμάτων
System.GC.Collect();
// Αναμονή για την ολοκλήρωση των τελικοποιητών
System.GC.WaitForPendingFinalizers();
Ο κύριος μηχανισμός συλλογής απορριμμάτων στο .NET είναι ο αλγόριθμος σήμανσης και συμπίεσης.