java:thread_memory_model
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
java:thread_memory_model [2017/03/18 14:22] – [Μεταβλητές ως πεδία της κλάσης που υλοποιεί ένα νήμα] gthanos | java:thread_memory_model [2018/03/08 09:31] (current) – [Στατικές μεταβλητές της κλάσης] gthanos | ||
---|---|---|---|
Line 17: | Line 17: | ||
Το μοντέλο μνήμης στην Java δίνεται από το παρακάτω σχήμα. Κάθε νήμα διαθέτει την δική του στοίβα (stack), όπου αποθηκεύονται οι τιμές των τοπικών μεταβλητών. Κάθε νήμα έχει πρόσβαση αποκλειστικά στην δική του στοίβα, | Το μοντέλο μνήμης στην Java δίνεται από το παρακάτω σχήμα. Κάθε νήμα διαθέτει την δική του στοίβα (stack), όπου αποθηκεύονται οι τιμές των τοπικών μεταβλητών. Κάθε νήμα έχει πρόσβαση αποκλειστικά στην δική του στοίβα, | ||
- | {{:java:java-memory-model-1.png?400 | }} Το διπλανό | + | {{ :java:thread_stack_heap.png?400 | Το σχήμα αποτυπώνει το βασικό μοντέλο μνήμης. Διακρίνονται το stack όπου αποθηκεύονται οι τοπικές μεταβλητές των μεθόδων που εκτελούνται από κάθε νήμα και το Heap που αποθηκεύονται τα αντικείμενα που δημιουργούνται από όλα τα νήματα. |
===== Το μοντέλο μνήμης των μεταβλητών ===== | ===== Το μοντέλο μνήμης των μεταβλητών ===== | ||
- | ==== Μεταβλητές ως παράμετροι | + | ==== Μεταβλητές ως παράμετροι |
- | === Βασικοί τύποι δεδομένων ως παράμετροι | + | === Βασικοί τύποι δεδομένων ως παράμετροι |
- | Κάθε τοπική μεταβλητή αποθηκεύεται στο stack. Για τις τοπικές μεταβλητές βασικού τύπου (//int, byte, long, double//) που γνωρίζουμε εκ των προτέρων το μήκος τους αυτές αποθηκεύονται στη στοίβα. Στο παρακάτω παράδειγμα, | + | Κάθε τοπική μεταβλητή αποθηκεύεται |
<code java> | <code java> | ||
int add(int a, int b) { | int add(int a, int b) { | ||
Line 33: | Line 33: | ||
</ | </ | ||
- | === Αναφορικοί τύποι δεδομένων ως παράμετροι | + | === Αναφορικοί τύποι δεδομένων ως παράμετροι |
Όταν δημιουργείται ένα αντικείμενο το οποίο ανατίθεται σε μία τοπική μεταβλητή ενός νήματος, | Όταν δημιουργείται ένα αντικείμενο το οποίο ανατίθεται σε μία τοπική μεταβλητή ενός νήματος, | ||
Line 77: | Line 77: | ||
class SharedObj { | class SharedObj { | ||
- | public Integer | + | public Integer |
- | public | + | public |
- | public long member1 = 12345; | ||
- | public long member2 = 67890; | ||
} | } | ||
</ | </ | ||
Line 116: | Line 114: | ||
</ | </ | ||
- | {{ : | + | {{ : |
- | Στο παρακάτω σχηματικό | + | Στο παραπάνω διάγραμμα δίνεται σχηματικά η εκτέλεση του παραπάνω κώδικα. |
<WRAP tip 80% center round> | <WRAP tip 80% center round> | ||
- | == Συμπερασματικά == | + | === Συμπερασματικά |
- Μία τοπική μεταβλητή βασικού τύπου (int, long, byte, double etc) αποθηκεύεται στο stack. | - Μία τοπική μεταβλητή βασικού τύπου (int, long, byte, double etc) αποθηκεύεται στο stack. | ||
- Μία τοπική μεταβλητή ενός αναφορικού τόπου αποθηκεύει την αναφορά στο stack, αλλά το αντικείμενο στο heap. | - Μία τοπική μεταβλητή ενός αναφορικού τόπου αποθηκεύει την αναφορά στο stack, αλλά το αντικείμενο στο heap. | ||
Line 127: | Line 125: | ||
- Οι στατικές μεταβλητές ανήκουν στις κλάσεις τις οποίες ορίζονται κατά συνέπεια είναι αποθηκευμένες πάντοτε στο heap. | - Οι στατικές μεταβλητές ανήκουν στις κλάσεις τις οποίες ορίζονται κατά συνέπεια είναι αποθηκευμένες πάντοτε στο heap. | ||
</ | </ | ||
+ | |||
+ | |Προηγούμενο: | ||
+ |
java/thread_memory_model.1489846936.txt.gz · Last modified: 2017/03/18 14:22 by gthanos