Unterschied: 1. Der Heap-Speicherplatz wird im Allgemeinen vom Programmierer zugewiesen und freigegeben, während der Stapelspeicherplatz automatisch vom Betriebssystem zugewiesen und freigegeben wird. 2. Der Heap wird im Cache der zweiten Ebene gespeichert und sein Lebenszyklus wird durch den Garbage Collection-Algorithmus der virtuellen Maschine bestimmt, während der Stack den Cache der ersten Ebene verwendet, der sich beim Aufruf normalerweise im Speicherplatz befindet , und wird sofort nach Abschluss des Anrufs freigegeben. 3. Die Datenstrukturen sind unterschiedlich. Heap kann als Baum betrachtet werden, während Stack eine First-in-Last-out-Datenstruktur ist.
Die Betriebsumgebung dieses Tutorials: Windows7-System, Java8-Version, DELL G3-Computer.
Stacks sind zwei Datenstrukturen. Ein Stapel ist eine Datenstruktur, in der Datenelemente der Reihe nach angeordnet sind. Datenelemente können nur an einem Ende (dem oberen Ende des Stapels) eingefügt und gelöscht werden. In Mikrocontroller-Anwendungen ist der Stack ein spezieller Speicherbereich, dessen Hauptfunktion darin besteht, Daten und Adressen vorübergehend zu speichern, und der normalerweise zum Schutz von Haltepunkten und Szenen verwendet wird. Wichtige Punkte: Heap, Warteschlangenpriorität, First In First Out (FIFO – First In First Out). Stapeln, zuerst rein, zuletzt raus (FILO – First-In/Last-Out).
1. Unterschied in der Stapelplatzzuweisung:
1. Stack (Betriebssystem): Wird vom Betriebssystem automatisch zugewiesen und freigegeben und speichert Funktionsparameterwerte und lokale Variablenwerte , usw. Seine Betriebsmethode ähnelt der des Stapels in der Datenstruktur.
2. Heap (Betriebssystem): Er wird im Allgemeinen vom Programmierer zugewiesen und freigegeben. Wenn der Programmierer ihn nicht freigibt, kann er vom Betriebssystem recycelt werden Das Programm endet. Die Zuordnungsmethode ähnelt einer verknüpften Liste.
2. Unterschiede in den Stack-Caching-Methoden:
1. Der Stack verwendet den Cache der ersten Ebene, wenn er aufgerufen wird, und wird sofort nach Abschluss des Aufrufs freigegeben. Der Heap wird im Cache der zweiten Ebene gespeichert. Im Cache wird der Lebenszyklus durch den Garbage-Collection-Algorithmus der virtuellen Maschine bestimmt (Objekte können nicht recycelt werden, sobald sie verwaist sind). Daher ist die Geschwindigkeit beim Aufrufen dieser Objekte relativ gering.
3. Unterschiede in der Stapeldatenstruktur:Heap (Datenstruktur): Der Heap kann als Baum betrachtet werden, z. B.: Heap-Sortierung;
Stapel (Datenstruktur): First-In, Last-Out Datenstruktur.
Stack und Heap in Java: Heap-Speicher wird zum Speichern von neu erstellten Objekten und Arrays verwendet. Der im Heap zugewiesene Speicher wird vom automatischen Garbage Collector der Java Virtual Machine verwaltet. Nachdem ein Array oder Objekt im Heap generiert wurde, können Sie auch eine spezielle Variable im Stapel definieren, sodass der Wert der Variablen im Stapel der ersten Adresse des Arrays oder Objekts im Heap-Speicher entspricht Der Stapel wird zu einer Referenzvariablen für ein Array oder Objekt. Eine Referenzvariable ist gleichbedeutend damit, einem Array oder Objekt einen Namen zu geben. Sie können dann die Referenzvariable im Stapel verwenden, um auf das Array oder Objekt im Heap im Programm zuzugreifen.
: 1. Klassenvariablen (durch statische Variablen geänderte Variablen): Wenn das Programm geladen wird, öffnet das System Speicher dafür im Heap und die Speicheradresse im Heap ist Zur Vereinfachung des Hochgeschwindigkeitszugriffs werden sie auf dem Stapel gespeichert. Die Lebensdauer einer statischen Variablen – dauert, bis das gesamte „System“ heruntergefahren wird.
2. Instanzvariablen: Wenn Sie das Java-Schlüsselwort new verwenden, weist das System Variablen (z. B. Klasseninstanzen) Speicherplatz im Heap zu, der nicht unbedingt kontinuierlich ist, und hasht ihn dann basierend auf den verstreuten Heap-Speicheradressen wandelt es in eine lange Zahlenfolge um, um den „physischen Standort“ dieser Variablen im Heap darzustellen. Lebenszyklus von Instanzvariablen – Wenn der Verweis auf eine Instanzvariable verloren geht, wird sie vom GC (Garbage Collector) in die wiederverwertbare „Liste“ aufgenommen, der Speicher im Heap wird jedoch nicht sofort freigegeben.
3. Lokale Variablen: Lokale Variablen werden in einer bestimmten Methode oder einem bestimmten Codesegment deklariert (z. B. in einer for-Schleife). Wenn sie ausgeführt wird, wird Speicher auf dem Stapel zugewiesen Der Speicher wird sofort freigegeben.
Dabei handelt es sich um Java-Speicherprobleme. Weitere Informationen finden Sie unter:
Java-SpeichermechanismusJava-TutorialDas obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Heap und Stack?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!