Τι είναι η συλλογή απορριμμάτων στην Java;
Η συλλογή απορριμμάτων στην Java είναι μια διαδικασία με την οποία τα προγράμματα εκτελούν αυτόματα τη διαχείριση μνήμης. Ο Συλλέκτης απορριμμάτων (GC) βρίσκει τα αχρησιμοποίητα αντικείμενα και τα διαγράφει για να ανακτήσει τη μνήμη. Στην Java, η δυναμική κατανομή των αντικειμένων επιτυγχάνεται χρησιμοποιώντας τον νέο χειριστή που χρησιμοποιεί κάποια μνήμη και η μνήμη παραμένει εκχωρημένη έως ότου υπάρχουν αναφορές για τη χρήση του αντικειμένου.
Όταν δεν υπάρχουν αναφορές σε ένα αντικείμενο, θεωρείται ότι δεν χρειάζεται πλέον και η μνήμη που καταλαμβάνεται από το αντικείμενο μπορεί να ανακτηθεί. Δεν υπάρχει ρητή ανάγκη να καταστρέψετε ένα αντικείμενο καθώς η Java χειρίζεται αυτόματα την απονομή.
Η τεχνική που επιτυγχάνει αυτό είναι γνωστή ως συλλογή απορριμμάτων . Προγράμματα που δεν εκχωρούν μνήμη μπορεί τελικά να διακοπεί όταν δεν έχει απομείνει μνήμη στο σύστημα για εκχώρηση. Αυτά τα προγράμματα λέγεται ότι έχουν διαρροές μνήμης.
Η συλλογή απορριμμάτων στην Java πραγματοποιείται αυτόματα κατά τη διάρκεια ζωής του προγράμματος, εξαλείφοντας την ανάγκη απόσυρσης μνήμης και αποφεύγοντας έτσι διαρροές μνήμης.
Στη γλώσσα C, είναι ευθύνη του προγραμματιστή να αφαιρέσει τη μνήμη που εκχωρείται δυναμικά χρησιμοποιώντας τη λειτουργία δωρεάν (). Εδώ οδηγεί η διαχείριση μνήμης Java.Σημείωση: Όλα τα αντικείμενα δημιουργούνται στο Heap Section of memory. Περισσότερα σχετικά με αυτό σε ένα μεταγενέστερο σεμινάριο.
Παράδειγμα: Για να μάθετε τον μηχανισμό συλλογής απορριμμάτων στην Java
Βήμα 1) Αντιγράψτε τον ακόλουθο κώδικα σε πρόγραμμα επεξεργασίας.
μαθητής τάξης {int ένα;int β;δημόσιο άκυρο setData (int c, int d) {α = γ;b = δ;}δημόσιο άκυρο showData () {System.out.println ("Τιμή a =" + a);System.out.println ("Τιμή b =" + b);}δημόσιος στατικός κενός κενός (String args []) {Student s1 = νέος μαθητής ();Student s2 = νέος φοιτητής ();s1.setData (1,2);s2.setData (3,4);s1.showData ();s2.showData ();// Μαθητής s3;// s3 = s2;//s3.showData ();// s2 = null;//s3.showData ();// s3 = μηδέν;//s3.showData ();}}
Βήμα 2) Αποθήκευση, μεταγλώττιση και εκτέλεση του κώδικα. Όπως φαίνεται στο διάγραμμα, δημιουργούνται δύο αντικείμενα και δύο μεταβλητές αναφοράς.
Βήμα 3) Γραμμή αποτυχίας # 20,21,22. Αποθήκευση, μεταγλώττιση και εκτέλεση του κώδικα.
Βήμα 4) Όπως φαίνεται στο παρακάτω διάγραμμα, δύο μεταβλητές αναφοράς δείχνουν το ίδιο αντικείμενο.
Βήμα 5) Γραμμή αποτυχίας # 23 & 24. Μεταγλώττιση, αποθήκευση & εκτέλεση του κώδικα
Βήμα 6) Όπως φαίνεται στο παρακάτω διάγραμμα, το s2 γίνεται μηδενικό, αλλά το s3 εξακολουθεί να δείχνει το αντικείμενο και δεν πληροί τις προϋποθέσεις για συλλογή σκουπιδιών java.
Βήμα 7) Γραμμή αποτυχίας # 25 & 26. Αποθήκευση, μεταγλώττιση και εκτέλεση του κώδικα
Βήμα 8) Σε αυτό το σημείο δεν υπάρχουν αναφορές που να δείχνουν το αντικείμενο και να πληρούν τις προϋποθέσεις για συλλογή απορριμμάτων. Θα αφαιρεθεί από τη μνήμη και δεν υπάρχει τρόπος ανάκτησής της.
Πώς να διαγράψετε ένα αντικείμενο στην Java;
1) Εάν θέλετε να καταστήσετε το αντικείμενο σας κατάλληλο για συλλογή απορριμμάτων, αντιστοιχίστε τη μεταβλητή αναφοράς σε μηδενική.
2) Οι πρωτόγονοι τύποι δεν είναι αντικείμενα. Δεν μπορούν να εκχωρηθούν μηδενικά.