Heim  >  Artikel  >  Java  >  JVM lernt den Java-Laufzeitdatenbereich

JVM lernt den Java-Laufzeitdatenbereich

零下一度
零下一度Original
2017-06-01 10:32:381402Durchsuche

1. Programmzähler

Der Zeilennummernindikator des vom aktuellen Thread ausgeführten Bytecodes.

2. Java Virtual Machine Stack

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

3. Der native Methodenstapel

ä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.

4. Java Heap (Java Heap)

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

Methodenbereich (Alias ​​Non-Heap)

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.

6. Runtime Constant Pool

ist Teil des Methodenbereichs.

7. Direkter Speicher

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.

Zusammenfassung:

  • 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn