Heim  >  Artikel  >  Java  >  Einführung in JVM-Speicherzuweisungsmethoden

Einführung in JVM-Speicherzuweisungsmethoden

青灯夜游
青灯夜游nach vorne
2019-03-28 13:34:463596Durchsuche

Der Inhalt dieses Artikels besteht darin, die Speicherzuweisungsmethode von JVM vorzustellen. Ich hoffe, dass er für Freunde hilfreich ist.

Vorwort

In diesem Artikel wird erläutert, wie die Speicherzuweisung durchgeführt wird, wenn ein Java-Programm ausgeführt wird.

Beim Kompilieren der Java Virtual Machine gibt es drei Arten von Speicherspeichern:

1, statischer Speicher (Methodenbereich)

2, Stapeltyp Speicher

3. Heap-Speicher

Statischer Speicher bedeutet, dass der Speicherbedarf der Daten während der Kompilierung ermittelt werden muss und dann ein fester Betrag festgelegt wird Es müssen viele Daten zugewiesen werden, sodass der statische Speicher keine variablen Datenstrukturen zulässt, da variable Daten den Speicherplatz nicht bestimmen.

Stack-Speicher ist genau das Gegenteil vom statischen Speicher beim Kompilieren Zeitpunkt, Stapelspeicherung Die angegebenen Speicherdaten sind nur dann bekannt, wenn die Daten tatsächlich ausgeführt werden.

Heapspeicher wird mit Stapelspeicher verglichen Vor dem Zuweisen von Speicherplatz muss angegeben werden, wie viel Speicher den Daten zugewiesen werden soll. Der Heap-Speicher kann jedoch nicht den für Datenstrukturen wie Variablenarrays und Objektinstanzen erforderlichen Speicherplatz bestimmen, sodass der Heap aus großen Bereichen verfügbarer Blöcke besteht und freie Blöcke

Stack und Heap

Statische Speicherung ist relativ einfach, daher konzentrieren wir uns auf die Analyse der Beziehung und des Unterschieds zwischen Stack und Heap

Unterschied :
Sobald die Daten im Stapel ihren Umfang überschreiten, werden sie freigegeben und der Speicher wird durch andere Daten belegt.
Im Heap werden die zugewiesenen Der Speicher wird vom automatischen Garbage Collector der Java Virtual Machine verwaltet. Diese veränderlichen Arrays und Objekte werden zu Müll, wenn keine Referenzvariablen auf sie verweisen, aber sie belegen immer noch Speicher und werden zu einem ungewissen Zeitpunkt vom Garbage Collector freigegeben

In einer JVM-Instanz gibt es nur einen Heap-Bereich und der Stapel kann mehrere

Beziehungen haben.
Nachdem Sie Daten im Heap erstellt haben, können Sie eine definieren Variable im Stapel, die auf bestimmte Daten im Heap zeigt (zeigt auf die erste Adresse der Daten), das heißt, diese Variable wird zu einer Referenzvariablen für die Daten im Heap. Sie können die Referenzvariable verwenden, um auf sie zuzugreifen Daten im Heap. Dies ist der Zeiger von Java.

Und jede Java-Anwendung verfügt über eine JVM-Instanz, und jede Instanz entspricht einem Heap. Während des Betriebs dieser Anwendung werden alle Klasseninstanzen und Arrays in diesem Heap abgelegt, und wenn ein Objekt erstellt wird, ist dies der Fall Von zwei Stellen aus zugewiesen, ist es im Heap der tatsächliche Wert des Objekts und im Stapel (Stapel, auch Stapel genannt) der Index des Objekts im Heap

Stapel (Stapel)

Schauen Sie sich zuerst dieses Bild an (na ja, es ist sehr anschaulich)

Einführung in JVM-Speicherzuweisungsmethoden

JVM basiert auf dem Stapel Ja, alle Sobald ein neuer Thread erstellt wird, wird ein Stapel zugewiesen, der auf Frames basiert und über die First-In-Last-Out-Funktion verfügt (siehe Abbildung zum Verständnis).

Wenn eine Java-Methode aktiviert wird, wird sie aktiviert Ein Frame wird in den Stapel gelegt (dies ist Push auf den Stapel). Während der Ausführung dieser Methode wird dieser Frame verwendet, um die Existenz der

-Methode zu speichern wird durch den Stapel bestimmt, und aufgrund der First-in-Last-out-Form ist es umso schwieriger, den Speicher des Stapels freizugeben, je tiefer die Methoden verschachtelt sind. Daher empfehle ich nicht die Verwendung rekursiver Methoden

Die spezifische Implementierung von Stack-Push und -Popping wird unten veröffentlicht

Verwenden Sie Stack-Push und -Pop, um die Zeichenfolge umzukehren

String value = "test 1234567890";
StringBuffer result = new StringBuffer();
 
Stack stack = new Stack();
 
for(char c : value.toCharArray()) {
  stack.push(c);
}
 
while (!stack.empty()) {
  result.append(stack.pop());
}
 
value = result.toString();

Empfohlene verwandte Video-Tutorials: „Java-Tutorial"

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er kann hilfreich sein. Er wird für das Studium aller hilfreich sein. Weitere spannende Inhalte finden Sie in den entsprechenden Tutorial-Kolumnen auf der chinesischen PHP-Website! ! !

Das obige ist der detaillierte Inhalt vonEinführung in JVM-Speicherzuweisungsmethoden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen