Heim  >  Artikel  >  Java  >  Was sind die Laufzeitdatenbereiche in JVM?

Was sind die Laufzeitdatenbereiche in JVM?

王林
王林nach vorne
2019-11-26 11:10:262769Durchsuche

Was sind die Laufzeitdatenbereiche in JVM?

Erster Blick auf das Bild:

Was sind die Laufzeitdatenbereiche in JVM?

Java-bezogenes Video-Tutorial: Java-Kurs

1. Programmzähler (PC)

ist exklusiv für Threads. Es handelt sich um einen kleineren Speicherbereich und den Zeilennummernindikator des vom aktuellen Thread ausgeführten Bytecodes. Es ist der einzige Bereich in der Java Virtual Machine-Spezifikation, der OOM (OutOfMemoryError) nicht angibt.

2. Der Java Virtual Machine Stack

ist exklusiv für Threads. Der Lebenszyklus ist der gleiche wie der von Threads. Ist das Speichermodell für die Ausführung von Java-Methoden. Durch die Ausführung jeder Methode wird ein Stapelrahmen erstellt, der lokale Variablen und Operanden (Objektreferenzen) speichert. Der für lokale Variablen benötigte Speicherplatz wird beim Kompilieren zugewiesen. Die Größe des Stapelrahmens ändert sich also nicht.

Es gibt zwei Ausnahmen:

1) Wenn die Thread-Anforderungstiefe größer als die Stapeltiefe ist, wird ein StackOverFlowError ausgelöst.

2) Wenn der Stapel beim dynamischen Erweitern nicht genügend Speicher anfordern kann, wird OOM ausgelöst.

3. Heap

Der Java-Heap wird von allen Threads gemeinsam genutzt. Es wird beim Start der virtuellen Maschine erstellt. Gespeichert werden Instanzen und Arrays von Objekten. Der größte belegte Speicher. Es wird in die neue Generation (Junger Bereich) und die alte Generation (Alter Bereich) unterteilt. Die neue Generation ist in Eden-Bereich und Servior-Bereich unterteilt. Der Servior-Bereich ist in den From-Space-Bereich und den To-Space-Bereich unterteilt. Das Speicherverhältnis zwischen Eden-Bereich und Servior-Bereich beträgt 8:1. Wenn der Erweiterungsspeicher größer als der verfügbare Speicher ist, wird OOM ausgelöst.

Was sind die Laufzeitdatenbereiche in JVM?

4. Lokaler Methodenstapel

Der lokale Methodenstapel ist exklusiv für Threads. Ähnlich dem Java Virtual Machine Stack, aber anstatt Java-Methoden (Bytecode) bereitzustellen, werden native Nicht-Java-Methoden bereitgestellt. StackOverFlowError und OOM werden ebenfalls ausgelöst.

5. Methodenbereich

Der Methodenbereich wird von allen Threads gemeinsam genutzt. Wird zum Speichern von Klasseninformationen, Konstanten, statischen Variablen und anderen Daten verwendet, die von der virtuellen Maschine geladen wurden, auch als Non-Heap bezeichnet. Der Methodenbereich wird auch als „permanente Generierung“ bezeichnet. GC wird in diesem Bereich selten durchgeführt, was jedoch nicht bedeutet, dass er nicht recycelt wird. Der Zweck dieses Bereichs Recycling besteht hauptsächlich in der Wiederverwertung des ständigen Pools und der Entladung von Sorten. Wenn die Speicheranforderung größer ist als der tatsächlich verfügbare Speicher, wird OOM ausgelöst.

Empfohlene Artikel zum Thema Java: Erste Schritte mit Java

Das obige ist der detaillierte Inhalt vonWas sind die Laufzeitdatenbereiche in JVM?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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