Τι είναι το Stack Memory;
Το Stack in java είναι ένα τμήμα της μνήμης που περιέχει μεθόδους, τοπικές μεταβλητές και μεταβλητές αναφοράς. Η μνήμη στοίβας αναφέρεται πάντα με σειρά Last-In-First-Out. Οι τοπικές μεταβλητές δημιουργούνται στη στοίβα.
Τι είναι η μνήμη σωρού;
Το Heap είναι ένα τμήμα της μνήμης που περιέχει αντικείμενα και μπορεί επίσης να περιέχει μεταβλητές αναφοράς. Οι μεταβλητές παρουσίας δημιουργούνται στο σωρό
Κατανομή μνήμης στην Java
Η κατανομή μνήμης στην Java είναι η διαδικασία κατά την οποία τα τμήματα εικονικής μνήμης διατίθενται σε ένα πρόγραμμα για την αποθήκευση των μεταβλητών και παρουσιών δομών και τάξεων. Ωστόσο, η μνήμη δεν εκχωρείται σε ένα αντικείμενο στη δήλωση, αλλά δημιουργείται μόνο μια αναφορά. Για την κατανομή μνήμης του αντικειμένου, χρησιμοποιείται νέα μέθοδος (), οπότε στο αντικείμενο εκχωρείται πάντα μνήμη στο σωρό.
Η κατανομή μνήμης Java χωρίζεται σε ακόλουθες ενότητες:
- Σωρός
- Σωρός
- Κώδικας
- Στατικός
Αυτός ο διαχωρισμός της μνήμης απαιτείται για την αποτελεσματική του διαχείριση.
- Η ενότητα κώδικα περιέχει τον bytecode σας .
- Η ενότητα Stack της μνήμης περιέχει μεθόδους, τοπικές μεταβλητές και μεταβλητές αναφοράς.
- Η ενότητα Heap περιέχει Objects (μπορεί επίσης να περιέχει μεταβλητές αναφοράς).
- Η ενότητα Στατική περιέχει Στατικά δεδομένα / μεθόδους .
Διαφορά μεταξύ τοπικής και παρουσίας μεταβλητής
Η μεταβλητή παρουσίας δηλώνεται μέσα σε μια τάξη αλλά όχι μέσα σε μια μέθοδο
class Student{int num; // num is instance variablepublic void showData{}
Η τοπική μεταβλητή δηλώνεται μέσα σε μια μέθοδο που περιλαμβάνει ορίσματα μεθόδου .
public void sum(int a){int x = int a + 3;// a , x are local variables;}
Διαφορά μεταξύ Stack και Heap
Κάντε κλικ εδώ εάν το βίντεο δεν είναι προσβάσιμο
Ας πάρουμε ένα παράδειγμα για να το κατανοήσουμε καλύτερα.
Σκεφτείτε ότι η κύρια μέθοδος κλήσης της μεθόδου σας m1
public void m1{int x=20}
Στη στοίβα Java, θα δημιουργηθεί ένα πλαίσιο από τη μέθοδο m1.
Η μεταβλητή X σε m1 θα δημιουργηθεί επίσης στο πλαίσιο για m1 στη στοίβα. (Δείτε την παρακάτω εικόνα).
Η μέθοδος m1 καλεί τη μέθοδο m2. Στη στοίβα java, δημιουργείται ένα νέο πλαίσιο για m2 πάνω από το πλαίσιο m1.
Οι μεταβλητές b και c θα δημιουργηθούν επίσης σε πλαίσιο m2 σε στοίβα.
public void m2(int b){boolean c;}
Η ίδια μέθοδος m2 καλεί τη μέθοδο m3. Και πάλι δημιουργείται ένα πλαίσιο m3 στο πάνω μέρος της στοίβας (δείτε την εικόνα παρακάτω).
Ας πούμε τώρα ότι η μέθοδος μας m3 δημιουργεί ένα αντικείμενο για την κατηγορία "Λογαριασμός", ο οποίος έχει δύο περιπτώσεις μεταβλητή int p και int q
Account {Int p;Int q;}
Εδώ είναι ο κωδικός για τη μέθοδο m3
public void m3(){Account ref = new Account();// more code}
Η νέα δήλωση λογαριασμού () θα δημιουργήσει ένα αντικείμενο λογαριασμού στο σωρό.
Η μεταβλητή αναφοράς "ref" θα δημιουργηθεί σε μια στοίβα java.
Ο χειριστής ανάθεσης θα κάνει μια μεταβλητή αναφοράς για να δείξει το αντικείμενο στο Σωρό.
Μόλις ολοκληρωθεί η εκτέλεση της μεθόδου. Η ροή ελέγχου θα επιστρέψει στη μέθοδο κλήσης. Σε αυτήν την περίπτωση είναι η μέθοδος m2.
Η στοίβα από τη μέθοδο m3 θα ξεπλυθεί.
Επειδή η μεταβλητή αναφοράς δεν θα δείχνει πλέον στο αντικείμενο στο σωρό, θα ήταν κατάλληλη για συλλογή απορριμμάτων.
Μόλις η μέθοδος m2 ολοκληρώσει την εκτέλεση της. Θα βγει από τη στοίβα και όλες οι μεταβλητές της θα ξεπλυθούν και δεν θα είναι πλέον διαθέσιμες για χρήση.
Ομοίως για τη μέθοδο m1.
Τελικά, η ροή ελέγχου θα επιστρέψει στο σημείο εκκίνησης του προγράμματος. Η οποία συνήθως είναι η "κύρια" μέθοδος.
Τι γίνεται αν το αντικείμενο έχει αναφορά ως μεταβλητή παρουσίας του;
public static void main(String args[]) {A parent = new A(); //more code } class A{ B child = new B(); int e; //more code } class B{ int c; int d; //more code }
Σε αυτήν την περίπτωση, η μεταβλητή αναφοράς "παιδί" θα δημιουργηθεί στο σωρό, η οποία με τη σειρά της θα δείχνει το αντικείμενο της, κάτι σαν το διάγραμμα που φαίνεται παρακάτω.
Περίληψη:
- Όταν καλείται μια μέθοδος, δημιουργείται ένα πλαίσιο στο πάνω μέρος της στοίβας.
- Όταν ολοκληρωθεί η εκτέλεση μιας μεθόδου, η ροή ελέγχου επιστρέφει στη μέθοδο κλήσης και το αντίστοιχο πλαίσιο στοίβας ξεπλένεται.
- Οι τοπικές μεταβλητές δημιουργούνται στη στοίβα
- Οι μεταβλητές παρουσίας δημιουργούνται στο σωρό και αποτελούν μέρος του αντικειμένου στο οποίο ανήκουν.
- Οι μεταβλητές αναφοράς δημιουργούνται στη στοίβα.