Middle
Πού αποθηκεύονται οι τύποι αναφοράς και τι συμβαίνει με αυτούς κατά τη διάρκεια της εκτέλεσης της εφαρμογής;
sobes.tech AI
Απάντηση από AI
Οι τύποι αναφοράς αποθηκεύονται στον σωρό (Heap).
Κατά την εκτέλεση της εφαρμογής, συμβαίνουν τα εξής:
- Δημιουργία: Όταν δημιουργείται ένα αντικείμενο τύπου αναφοράς (π.χ.,
new MyClass()), η μνήμη για αυτό το αντικείμενο εκχωρείται στον σωρό. Η μεταβλητή που το περιέχει αποθηκεύει μια αναφορά σε αυτό το τμήμα μνήμης. - Πρόσβαση: Η πρόσβαση στα πεδία και τις μεθόδους του αντικειμένου γίνεται μέσω αυτής της αναφοράς.
- Συλλογή απορριμμάτων (Garbage Collection): Όταν ένα αντικείμενο δεν είναι πλέον προσβάσιμο από κανένα ενεργό μέρος του προγράμματος (δεν υπάρχουν αναφορές σε αυτό), ο συλλέκτης απορριμμάτων μπορεί να ελευθερώσει τη μνήμη που καταλαμβάνει στον σωρό. Αυτή η διαδικασία γίνεται αυτόματα "στο παρασκήνιο" και δεν απαιτεί ρηχή παρέμβαση από τον προγραμματιστή. Ο συλλέκτης απορριμμάτων σαρώνει περιοδικά τον σωρό, βρίσκει μη προσβάσιμα αντικείμενα και επιστρέφει τη μνήμη τους στο σύστημα.
- Τροποποίηση: Το περιεχόμενο του αντικειμένου στον σωρό μπορεί να αλλάξει. Αν πολλές μεταβλητές αναφοράς δείχνουν στο ίδιο αντικείμενο, οι αλλαγές στην κατάσταση του θα είναι ορατές μέσω άλλων μεταβλητών.
- Επαναπροσδιορισμός αναφοράς: Μια μεταβλητή αναφοράς μπορεί να επαναπροσδιοριστεί ώστε να δείχνει σε άλλο αντικείμενο ή στο
null.
Παράδειγμα:
// Δημιουργία ενός αντικειμένου String (αλυσίδες - τύπος αναφοράς) στον σωρό
String myString = "Hello";
// Η μεταβλητή myString_2 δείχνει στο ίδιο αντικείμενο
String myString_2 = myString;
// Δημιουργία ενός νέου αντικειμένου String στον σωρό και επαναπροσδιορισμός της αναφοράς
myString = "World";
// Τώρα, myString δείχνει σε ένα άλλο αντικείμενο, και το myString_2 συνεχίζει να δείχνει στο παλιό