Middle
Τι είναι ο συλλέκτης απορριμμάτων και πώς λειτουργεί;
sobes.tech AI
Απάντηση από AI
Ο συλλέκτης απορριμμάτων (Garbage Collector, GC) είναι ένας μηχανισμός αυτόματης διαχείρισης μνήμης που αναθέτει και ελευθερώνει μνήμη που δεν χρησιμοποιείται πλέον από το πρόγραμμα.
Αρχή λειτουργίας:
- Κατανομή μνήμης: Όταν ένα πρόγραμμα δημιουργεί αντικείμενα, ο συλλέκτης απορριμμάτων τους αναθέτει χώρο στον σωρό (heap).
- Καθορισμός προσβασιμότητας: Ο συλλέκτης απορριμμάτων καθορίζει ποια αντικείμενα είναι προσβάσιμα από τις "ρίζες" (root) του προγράμματος. Οι ρίζες μπορεί να είναι τοπικές μεταβλητές σε τρέχουσες λειτουργίες, στατικές μεταβλητές, αναφορές από νήματα κ.λπ.
- Συλλογή απορριμμάτων: Τα αντικείμενα που δεν είναι προσβάσιμα από τις ρίζες θεωρούνται "απορρίμματα" και η μνήμη τους μπορεί να ελευθερωθεί.
Υπάρχουν διάφοροι αλγόριθμοι συλλογής απορριμμάτων, όπως:
- Mark-and-Sweep (Σήμανση και Καθάρισμα): Ο συλλέκτης διατρέχει το γράφο των προσβάσιμων αντικειμένων από τις ρίζες, τα σημαδεύει. Στη συνέχεια, διατρέχει ολόκληρο τον σωρό και ελευθερώνει τη μνήμη των σημαδεμένων αντικειμένων.
- Αντιγραφή: Ο σωρός χωρίζεται σε δύο μέρη. Τα προσβάσιμα αντικείμενα αντιγράφονται από ένα μέρος σε άλλο, και το παλιό μέρος καθαρίζεται.
- Γενεακός: Τα αντικείμενα χωρίζονται σε γενιές. Τα νέα αντικείμενα πηγαίνουν στη νεαρή γενιά, τα παλιά στη ώριμη. Η συλλογή απορριμμάτων γίνεται συχνότερα στη νεαρή γενιά, καθώς τα περισσότερα αντικείμενα έχουν σύντομη διάρκεια ζωής.
Παράδειγμα λειτουργίας σε Java (απλουστευμένο):
// Το πρόγραμμα δημιουργεί αντικείμενα στον σωρό
Object obj1 = new Object();
Object obj2 = new Object();
// το obj1 γίνεται μη προσβάσιμο
obj1 = null;
// Ο συλλέκτης απορριμμάτων μπορεί να ελευθερώσει τη μνήμη που καταλαμβάνει το obj1