Sobes.tech
Middle

Τι είναι ο συλλέκτης απορριμμάτων και πώς λειτουργεί;

sobes.tech AI

Απάντηση από AI

Ο συλλέκτης απορριμμάτων (Garbage Collector, GC) είναι ένας μηχανισμός αυτόματης διαχείρισης μνήμης που αναθέτει και ελευθερώνει μνήμη που δεν χρησιμοποιείται πλέον από το πρόγραμμα.

Αρχή λειτουργίας:

  1. Κατανομή μνήμης: Όταν ένα πρόγραμμα δημιουργεί αντικείμενα, ο συλλέκτης απορριμμάτων τους αναθέτει χώρο στον σωρό (heap).
  2. Καθορισμός προσβασιμότητας: Ο συλλέκτης απορριμμάτων καθορίζει ποια αντικείμενα είναι προσβάσιμα από τις "ρίζες" (root) του προγράμματος. Οι ρίζες μπορεί να είναι τοπικές μεταβλητές σε τρέχουσες λειτουργίες, στατικές μεταβλητές, αναφορές από νήματα κ.λπ.
  3. Συλλογή απορριμμάτων: Τα αντικείμενα που δεν είναι προσβάσιμα από τις ρίζες θεωρούνται "απορρίμματα" και η μνήμη τους μπορεί να ελευθερωθεί.

Υπάρχουν διάφοροι αλγόριθμοι συλλογής απορριμμάτων, όπως:

  • Mark-and-Sweep (Σήμανση και Καθάρισμα): Ο συλλέκτης διατρέχει το γράφο των προσβάσιμων αντικειμένων από τις ρίζες, τα σημαδεύει. Στη συνέχεια, διατρέχει ολόκληρο τον σωρό και ελευθερώνει τη μνήμη των σημαδεμένων αντικειμένων.
  • Αντιγραφή: Ο σωρός χωρίζεται σε δύο μέρη. Τα προσβάσιμα αντικείμενα αντιγράφονται από ένα μέρος σε άλλο, και το παλιό μέρος καθαρίζεται.
  • Γενεακός: Τα αντικείμενα χωρίζονται σε γενιές. Τα νέα αντικείμενα πηγαίνουν στη νεαρή γενιά, τα παλιά στη ώριμη. Η συλλογή απορριμμάτων γίνεται συχνότερα στη νεαρή γενιά, καθώς τα περισσότερα αντικείμενα έχουν σύντομη διάρκεια ζωής.

Παράδειγμα λειτουργίας σε Java (απλουστευμένο):

// Το πρόγραμμα δημιουργεί αντικείμενα στον σωρό
Object obj1 = new Object();
Object obj2 = new Object();

// το obj1 γίνεται μη προσβάσιμο
obj1 = null;

// Ο συλλέκτης απορριμμάτων μπορεί να ελευθερώσει τη μνήμη που καταλαμβάνει το obj1