Sobes.tech
Middle

Πού αποθηκεύονται οι τύποι αναφοράς και τι συμβαίνει με αυτούς κατά τη διάρκεια της εκτέλεσης της εφαρμογής;

sobes.tech AI

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

Οι τύποι αναφοράς αποθηκεύονται στον σωρό (Heap).

Κατά την εκτέλεση της εφαρμογής, συμβαίνουν τα εξής:

  1. Δημιουργία: Όταν δημιουργείται ένα αντικείμενο τύπου αναφοράς (π.χ., new MyClass()), η μνήμη για αυτό το αντικείμενο εκχωρείται στον σωρό. Η μεταβλητή που το περιέχει αποθηκεύει μια αναφορά σε αυτό το τμήμα μνήμης.
  2. Πρόσβαση: Η πρόσβαση στα πεδία και τις μεθόδους του αντικειμένου γίνεται μέσω αυτής της αναφοράς.
  3. Συλλογή απορριμμάτων (Garbage Collection): Όταν ένα αντικείμενο δεν είναι πλέον προσβάσιμο από κανένα ενεργό μέρος του προγράμματος (δεν υπάρχουν αναφορές σε αυτό), ο συλλέκτης απορριμμάτων μπορεί να ελευθερώσει τη μνήμη που καταλαμβάνει στον σωρό. Αυτή η διαδικασία γίνεται αυτόματα "στο παρασκήνιο" και δεν απαιτεί ρηχή παρέμβαση από τον προγραμματιστή. Ο συλλέκτης απορριμμάτων σαρώνει περιοδικά τον σωρό, βρίσκει μη προσβάσιμα αντικείμενα και επιστρέφει τη μνήμη τους στο σύστημα.
  4. Τροποποίηση: Το περιεχόμενο του αντικειμένου στον σωρό μπορεί να αλλάξει. Αν πολλές μεταβλητές αναφοράς δείχνουν στο ίδιο αντικείμενο, οι αλλαγές στην κατάσταση του θα είναι ορατές μέσω άλλων μεταβλητών.
  5. Επαναπροσδιορισμός αναφοράς: Μια μεταβλητή αναφοράς μπορεί να επαναπροσδιοριστεί ώστε να δείχνει σε άλλο αντικείμενο ή στο null.

Παράδειγμα:

// Δημιουργία ενός αντικειμένου String (αλυσίδες - τύπος αναφοράς) στον σωρό
String myString = "Hello";

// Η μεταβλητή myString_2 δείχνει στο ίδιο αντικείμενο
String myString_2 = myString;

// Δημιουργία ενός νέου αντικειμένου String στον σωρό και επαναπροσδιορισμός της αναφοράς
myString = "World";

// Τώρα, myString δείχνει σε ένα άλλο αντικείμενο, και το myString_2 συνεχίζει να δείχνει στο παλιό