Erster Blick auf das Bild:
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.
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!