Der Zeilennummernindikator des vom aktuellen Thread ausgeführten Bytecodes.
ist privat für den Thread und hat denselben Lebenszyklus wie der Thread. Wird zum Speichern der lokalen Variablentabelle , des Operandenstapels, der dynamischen verknüpften Liste, des Methodenexits und anderer Informationen verwendet.
Speicherinhalt der lokalen Variablentabelle:
Grundlegende Datentypen (boolean, byte, char, short, int, float, long, double)
Objektreferenz (anders als Symbolreferenz, die im Konstantenpool gespeichert ist)
returnAddress-Typ (zeigt auf die Adresse einer Bytecode-Anweisung)
64-Bit-lange und doppelte Daten belegen 2 lokale Variablenräume (Slots) und der Rest belegt 1 Slot.
Zwei Ausnahmen:
StackOverflowError: Die vom Thread angeforderte Stapeltiefe > die von der virtuellen Maschine zulässige Tiefe
OutOfMemoryError: Während der dynamischen Erweiterung kann nicht genügend Speicher beantragt werden
ähnelt dem Stapel der virtuellen Maschine, der Unterschied besteht darin, dass der native Methodenstapel dient Native Methoden, und der Stapel der virtuellen Maschine bedient Java-Methoden.
wird von allen Threads gemeinsam genutzt und speichert Objektinstanzen und Arrays .
Der vom Garbage Collector verwaltete Hauptbereich, auch „GC Heap (Garbage Collected Heap)“ genannt.
Umfasst die neue Generation (Eden Space, From Survivor Space, To Survivor Space) und die alte Generation.
Kann in mehrere Thread-private Zuordnungspuffer (Thread Local Allocation Buffer, TLAB) unterteilt werden.
Es kann physikalisch diskontinuierlich, aber logisch kontinuierlich sein.
Erweiterbar: -Xmx- und -Xms-Steuerelemente. -Xmx maximale Heap-Speichergröße, -Xms anfängliche Heap-Speichergröße.
Wenn im Heap kein freier Speicher vorhanden ist, um die Instanzzuweisung abzuschließen, und er nicht mehr erweitert werden kann – OutOfMemoryError
wird auch von allen Threads gemeinsam genutzt und zum Speichern von Klasseninformationen, Konstanten, statischen Variablen, vom Just-in-Time-Compiler kompiliertem Code und anderen Daten verwendet, die von der virtuellen Maschine geladen wurden.
wird auch „Permanent Generation“ genannt, ist aber im Wesentlichen nicht gleichwertig.
Die permanente Generation hat eine Obergrenze von -XX:MaxPermSize.
ist Teil des Methodenbereichs.
Die neu zu JDK1.4 hinzugefügte NIO-Klasse (New Input/Output) führt eine Methode ein, die auf der Kanal- und Puffer-E/A-Methode basiert und die native verwenden kannFunktion Bibliothek zur direkten Zuweisung vonOff-Heap-Speicher. Es ist nicht durch die Java-Heap-Größe (-Xmx) begrenzt, was dazu führen kann, dass die Summe jedes Speicherbereichs größer als die physische Speichergrenze ist, was dazu führt, dass während der dynamischen Erweiterung ein OutOfMemoryError auftritt.
Die drei Speicherbereiche 1, 2 und 3 sind für jeden Thread privat
4 und 5 sind Die
6, die allen Threads gemeinsam sind, sind Teil von 5
7 ist nicht Teil des Laufzeitdatenbereichs der virtuellen Maschine, gehört aber dazu der Speicherbereich der virtuellen Maschine Anderer physischer Speicher
[Verwandte Empfehlungen]
1. Einführung von zwei Codebeispielen zur Berechnung der Java-Laufzeit
3.Detaillierter JDBC-Beispielcode für das Java-Transaktionsmanagement
Das obige ist der detaillierte Inhalt vonJVM lernt den Java-Laufzeitdatenbereich. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!