Was ist Speicherzuweisung in Java? Stapel- und Heapspeicher



Dieser Artikel, der auf 'Speicherzuweisung in Java' basiert, vermittelt Ihnen detaillierte Informationen zur Speicherzuweisung sowie zu Stack- und Heap-Datenstrukturen.

Speicherzuweisung ist ein Prozess, durch den Computerprogramme und -dienste physisch oder virtuell zugewiesen werden Erinnerung Raum. In diesem Artikel erfahren Sie mehr über die Speicherzuordnung in und wir werden Stack- und Heap-Speicher diskutieren.

Was ist Stapelspeicher?

Der Java-Stapelspeicher wird für die Ausführung eines Threads verwendet. Sie enthalten methodenspezifische Werte, die nur von kurzer Dauer sind, und Verweise auf andere Objekte im Heap, auf die von der Methode verwiesen wird.





Stapel Speicher wird immer in referenziert LIFO (Last-In-First-Out) Bestellung. Bei jedem Aufruf einer Methode wird im Stapelspeicher ein neuer Block erstellt, in dem die Methode lokale Grundwerte enthält und auf andere Objekte in der Methode verweist.

Sobald die Methode endet, wird der Block nicht mehr verwendet und steht für die nächste Methode zur Verfügung.



So erstellen Sie eine Salesforce-App

Die Stapelspeichergröße ist im Vergleich zum Heap-Speicher sehr gering.

Hauptmerkmale des Stapelspeichers

Abgesehen von dem, was wir bisher besprochen haben, sind im Folgenden einige andere Merkmale von aufgeführt Stapel Erinnerung:

  • Es wächst und schrumpft, wenn neue Methoden aufgerufen bzw. zurückgegeben werden
  • Variablen innerhalb des Stapels existieren nur, solange die Methode ausgeführt wird, mit der sie erstellt wurden
  • Es ist automatisch zugewiesen und freigegeben, wenn die Methode die Ausführung beendet hat
  • Wenn dieser Speicher voll ist, wirft Java java.lang.StackOverFlowError
  • Zugriff auf diesen Speicher ist schnell im Vergleich zum Heapspeicher
  • Diese Erinnerung ist fadensicher da jeder Thread in einem eigenen Stapel arbeitet

Methoden in der Stapelklasse

  • Objektschub ( Objektelement ): Schiebt ein Element oben auf den Stapel.
  • Objekt pop (): Entfernt das oberste Element des Stapels und gibt es zurück. Ein 'EmptyStackException' Eine Ausnahme wird ausgelöst, wenn wir pop () aufrufen, wenn der aufrufende Stapel leer ist.
  • Objektblick (): Gibt das Element oben im Stapel zurück, entfernt es jedoch nicht.
  • Boolean leer (): Es gibt true zurück, wenn sich nichts oben auf dem Stapel befindet. Andernfalls wird false zurückgegeben.
  • int search ( Objektelement ): Es bestimmt, ob ein Objekt im Stapel vorhanden ist. Wenn das Element gefunden wird, gibt es die Position des Elements vom oberen Rand des Stapels zurück. Andernfalls wird -1 zurückgegeben.

Java-Code für die Stack-Implementierung

import java.io. * import java.util. * class Test {statische Leere stack_push (Stack stack) {for (int i = 0 i<5 i++){ stack.push(i) } } static void stack_pop(Stack stack){ System.out.println('Pop :') for(int i = 0 i < 5 i++){ Integer y = (Integer) stack.pop() System.out.println(y) } } static void stack_peek(Stack stack){ Integer element = (Integer) stack.peek() System.out.println('Element on stack top : ' + element) } static void stack_search(Stack stack, int element){ Integer pos = (Integer) stack.search(element) if(pos == -1) System.out.println('Element not found') else System.out.println('Element is found at position ' + pos) } public static void main (String[] args){ Stack stack = new Stack() stack_push(stack) stack_pop(stack) stack_push(stack) stack_peek(stack) stack_search(stack, 2) stack_search(stack, 6) } } 

//Ausgabe



memory-allocation-in-java

Bewegen wir uns nun in den Heap Space.

Heap Space in Java

Der Speicher wird während der Ausführung von Anweisungen zugewiesen, die von Programmierern geschrieben wurden. Beachten Sie, dass der Name Heap nichts mit der Heap-Datenstruktur zu tun hat. Es wird Heap genannt, weil es ein Stapel Speicherplatz ist, der Programmierern zur Verfügung steht zugewiesen und Aufheben der Zuweisung. Wenn ein Programmierer diesen Speicher nicht gut handhabt, kann ein Speicherverlust auftretenim Programm passieren.

Hauptmerkmale des Java-Heapspeichers

  • Abgesehen von dem, was wir bisher besprochen haben, sind im Folgenden einige andere Merkmale des Heapspeichers aufgeführt:
  • Der Zugriff erfolgt über komplexe Speicherverwaltungstechniken, einschließlich Junge Generation, alt oder Tenured Generation, und Permanente Generation
  • Wenn der Heap-Speicher voll ist, wirft Java java.lang.OutOfMemoryError
  • Der Zugriff auf diesen Speicher ist relativ langsamer als der Stapelspeicher
  • Dieser Speicher wird im Gegensatz zum Stapel nicht automatisch freigegeben. Es braucht Müllsammler nicht verwendete Objekte freizugeben, um die Effizienz der Speichernutzung zu erhalten
  • Im Gegensatz zu Stack ist ein Heap nicht vorhanden fadensicher und muss durch ordnungsgemäße Synchronisierung des Codes geschützt werden

Unterschied zwischen Java Heap Space und Stack Memory

Basierend auf den obigen Erklärungen können wir leicht die folgenden Unterschiede zwischen schließen Haufen und Stapel Erinnerung.

  • Haufen Der Speicher wird von allen Teilen der Anwendung verwendet, während der Stapelspeicher nur von einem Ausführungsthread verwendet wird.
  • Wenn ein Objekt erstellt wird, wird es immer im Heap-Bereich gespeichert, und der Stapelspeicher enthält den Verweis darauf. Stapelspeicher enthält nur lokale primitive Variablen und Referenzvariablen zu Objekten im Heap-Bereich.
  • Auf im Heap gespeicherte Objekte kann global zugegriffen werden, während andere Threads nicht auf den Stapelspeicher zugreifen können.
  • Die Speicherverwaltung im Stapel erfolgt in a LIFO während es im Heap-Speicher komplexer ist, weil es global verwendet wird. Heapspeicher ist unterteilt in Junge Generation, alte Generation usw. Weitere Informationen finden Sie unter Java Garbage Collection.
  • Stapelspeicher ist kurzlebig Der Heap-Speicher lebt vom Anfang bis zum Ende der Anwendungsausführung.
  • Wir können benutzen -XMX und -XMS JVM-Option zum Definieren der Startgröße und der maximalen Größe des Heapspeichers. Wir können benutzen -XSS um die Stapelspeichergröße zu definieren.
  • Wenn der Stapelspeicher voll ist, wird die Java-Laufzeit ausgelöst java.lang.StackOverFlowError Wenn der Heap-Speicher voll ist, wird er ausgelöst java.lang.OutOfMemoryError: Java heap spaceError.
  • Die Stapelspeichergröße ist im Vergleich zum Heap-Speicher sehr gering. Wegen der Einfachheit der Speicherzuordnung (LIFO), Der Stapelspeicher ist im Vergleich zu sehr schnellHeapspeicher.

Vergleichstabelle

PARAMETER STAPEL HAUFEN
Basic Der Speicher wird in einem zusammenhängenden Block zugewiesenDer Speicher wird in zufälliger Reihenfolge zugewiesen
Zuteilung und Freigabe Automatisch vom CompilerHandbuch vom Programmierer
Kosten WenigerMehr
Implementierung SchwerEinfach
Zugriffszeit SchnellerLangsamer
Hauptproblem SpeichermangelSpeicherfragmentierung
Lokalität des Unterschieds AusgezeichnetAngemessene
Flexibilität Fester ZinssatzGrößenänderung ist möglich

Damit ist das Tutorial „Speicherzuordnung in Java“ beendet. Ich hoffe, Sie haben das Konzept und seine Umsetzung anhand einiger Beispiele in Echtzeit verstanden.

Jetzt wo du verstanden hastSpeicherzuordnung in JavaGrundlagen durch diesen Artikel „Speicherzuordnung in Java“ finden Sie im von Edureka, einem vertrauenswürdigen Online-Lernunternehmen mit einem Netzwerk von mehr als 250.000 zufriedenen Lernenden auf der ganzen Welt. Die Java J2EE- und SOA-Schulungs- und Zertifizierungskurse von Edureka richten sich an Studenten und Fachleute, die Java-Entwickler werden möchten. Der Kurs soll Ihnen einen Vorsprung in die Java-Programmierung verschaffen und Sie sowohl für grundlegende als auch für fortgeschrittene Java-Konzepte sowie für verschiedene Java-Frameworks wie Hibernate & schulen Frühling .

Hast du eine Frage an uns? Erwähnen Sie es im Kommentarbereich dieses Blogs „Speicherzuweisung in Java“ und wir werden uns so schnell wie möglich bei Ihnen melden.