English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Die JVM teilt den Speicherplatz in zwei Teile auf, einen Stack und einen Heap-Speicher. Der Stack-Speicher wird hauptsächlich verwendet, um die Reihenfolge der Methodenausführung und lokale Variablen zu speichern
Der Stack speichert immer Blöcke nach LIFO-(Last In, First Out)-Reihenfolge, während der Heap-Speicher dynamisch zugewiesen und freigegeben wird, um Speicherblöcke zuzuweisen und abzuwerfen
Der Speicher, der dem Heap zugewiesen wird, bleibt immer bestehen, bis eines der folgenden Ereignisse eintritt:
Programmende
Vergesslich
Im Gegensatz dazu bleibt der Speicher, der der Stack zugewiesen wird, immer bestehen, bis die Funktion zurückgegeben wird. Hier sind die Unterschiede.
Nummer | Schlüssel | Stack | Heap-Speicher |
---|---|---|---|
1 | Grundlegend | Der Stack-Speicher wird verwendet, um kurze Lebensdauern zu speichern, z.B. lokale Variablen, Referenzvariablen von Objekten | Der Heap-Speicher wird für die Speicherung von Objekten und JRE-Klassen zugewiesen |
2 | Bestellmodus | Der Stack wird始终按LIFO-(Last In, First Out)-Reihenfolge beibehalten | Der Heap-Speicher wird dynamisch zugewiesen und es gibt keine festen Muster, um Blöcke im Speicher zuzuweisen und abzuwerfen |
3 | Größe | Wir können JVM-Parameter verwenden-XSS erhöht die Größe des Stack-Speichers | Wir können JVM-Optionen verwenden-Xms und-Mit Xmx können Sie die Größe des Heap-Speichers erhöhen oder verringern. |
4 | Sichtbarkeit | Die Variable ist nur für den Eigentümer-Thread sichtbar | Alle Threads sind sichtbar |
5 | Ausnahme | JVM wirft java.lang.StackOverflowError aus | JVM wirft java.lang.OutOfMemoryError aus |