English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Unterschied zwischen Heap und Heap-Speicher in Java

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.

NummerSchlüsselStackHeap-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