Πώς λειτουργεί ο συλλέκτης απορριμμάτων στη JavaScript;
sobes.tech AI
Απάντηση από AI
Στην JavaScript, ο συλλέκτης απορριμμάτων λειτουργεί αυτόματα, εντοπίζοντας αντικείμενα που δεν είναι πλέον προσβάσιμα από τις προσβάσιμες ρίζες (παγκόσμιο αντικείμενο, τρέχουσα κλήση λειτουργίας κ.λπ.) και ελευθερώνοντας τη μνήμη που καταλαμβάνουν.
Βασικοί μηχανισμοί:
- Μετρητής αναφορών: Παλαιότερη μέθοδος που μετρά τον αριθμό των αναφορών σε ένα αντικείμενο. Η μνήμη απελευθερώνεται όταν ο μετρητής φτάσει στο μηδέν. Μειονέκτημα: δεν μπορεί να χειριστεί κυκλικές αναφορές.
- Σήμανση και διαγραφή: Σύγχρονη και πιο διαδεδομένη μέθοδος.
- Σήμανση: Ξεκινώντας από τις ρίζες, ο συλλέκτης απορριμμάτων διατρέχει αναδρομικά το γράφο αντικειμένων, σημαδεύοντας όλα τα προσβάσιμα αντικείμενα.
- Καθαρισμός: Διατρέχει το σωρό και διαγράφει όλα τα αντικείμενα που δεν έχουν σημαδευτεί ως προσβάσιμα.
Το πλεονέκτημα της "Σήμανσης και διαγραφής" σε σύγκριση με τον "Μετρητή αναφορών" είναι ότι χειρίζεται σωστά τις κυκλικές αναφορές.
Ο κινητήρας JavaScript (π.χ., V8 στο Chrome) παρακολουθεί συνεχώς τη χρήση μνήμης και ενεργοποιεί τον συλλέκτη απορριμμάτων όταν χρειάζεται. Ο προγραμματιστής δεν μπορεί να ελέγξει άμεσα αυτή τη διαδικασία, αλλά μπορεί να επηρεάσει έμμεσα, αποφεύγοντας περιττές αναφορές και διαχειριζόμενος τον κύκλο ζωής των πολύπλοκων αντικειμένων.