Heim > Java > JavaErste Schritte > Eine ausführliche Einführung in den JVM-Speicherdatenbereich

Eine ausführliche Einführung in den JVM-Speicherdatenbereich

王林
Freigeben: 2019-11-25 16:08:18
nach vorne
2724 Leute haben es durchsucht

Eine ausführliche Einführung in den JVM-Speicherdatenbereich

JAVA-Programme laufen auf virtuellen Maschinen und benötigen beim Ausführen Speicherplatz. Wenn die virtuelle Maschine das JAVA-Programm ausführt, wird der von ihr verwaltete Speicher zur einfachen Verwaltung in verschiedene Datenbereiche unterteilt. Der Speicherdatenbereich für die Verwaltung virtueller Maschinen ist wie folgt unterteilt:

Eine ausführliche Einführung in den JVM-Speicherdatenbereich

Empfehlung für Java-Lernvideos: Java-Online-Tutorial

1. Programmzählerregister

Zeilennummernanzeige, Verzweigung, Schleife, Sprung, Ausnahmebehandlung, Thread-Wiederherstellung (CPU-Umschaltung) von Bytecode-Anweisungen, jeder Thread benötigt einen unabhängigen Zähler und Thread-Privatspeicher nicht beeinflussen sich gegenseitig und in diesem Bereich tritt keine Speicherüberlaufausnahme auf.

2. Virtual Machine Stack (VM Stack)

Der Virtual Machine Stack (VM Stack) ist für den Thread privat Der Stapel der virtuellen Maschine ist ein Java-Speichermodell der Methodenausführung. Bei der Ausführung jeder Methode wird ein Stapelrahmen erstellt, der die grundlegende Datenstruktur während der Methodenausführung darstellt.

Der Stapelrahmen wird zum Speichern verwendet: lokale Variablentabelle, Operandenstapel, dynamische Verknüpfung, Methodenausgang usw. Jede Methodenausführung entspricht dem Prozess des Stapelrahmens der virtuellen Maschine von Stapel zu Stapel. Es handelt sich um eine Datenstruktur, eine lokale Variablentabelle in der virtuellen Maschine, die dem Programmdatenmodell über der physischen Schicht entspricht.

Lokale Variablentabelle ist ein Programm, das ein Datenmodell ausführt, das verschiedene Datentypen speichert, die während der Kompilierung bekannt sind, wie zum Beispiel:

Boolean, Byte, Char, Short, Int, Float, Long, Double, Object Referenztyp (Objektspeicheradressvariable, Zeiger oder Handle). Wenn das Programm ausgeführt wird, wird die Größe des Stack-Frame-Speicherplatzes gemäß der lokalen Variablentabelle zugewiesen. Während des Betriebs bleibt die Größe unverändert. Ausnahmetyp: stackOverFlowError Die Thread-Anforderungsstapeltiefe ist größer als die zulässige Tiefe der virtuellen Maschine. OutOfMemory Der Speicherplatz ist erschöpft und kann nicht erweitert werden.

3. Nativer Methodenstapel

Ähnlich wie der virtuelle Maschinenstapel bedient der virtuelle Maschinenstapel Java-Programme und der native Methodenstapel unterstützt die Ausführung der virtuellen Maschine Die spezifische Implementierung des Dienstes wird vom Hersteller der virtuellen Maschine bestimmt und löst auch stackOverFlowError- und OutOfMemory-Ausnahmen aus.

4. Heap

Heap ist der größte Teil des von der virtuellen Maschine verwalteten Speichers und wird zum Speichern von Objektinstanzen (Objekten) verwendet , Array), da der GC-Kollektor in Generationen gesammelt wird, ist er unterteilt in: Eden der neuen Generation, vom SurVivor-Speicherplatz, zum SurVivor-Speicherplatz, der in mehrere Threads unterteilt werden kann -privater Puffer, alte Generation.

5. Methodenbereich

Der Methodenbereich ist wie der Heap-Bereich ein Thread-gemeinsamer Speicherbereich und wird zum Speichern von Daten verwendet, die von der virtuellen Maschine geladen werden Informationen, Konstanten, statische Variablen, vom Just-in-Time-Compiler kompilierter Code (dynamisch geladenes OSGI) und andere Daten. Theoretisch ist es Teil der Java Virtual Machine. Zur Unterscheidung wird es Non-Heap genannt.

Sie können festlegen, dass in diesem Bereich keine Speicherbereinigung durchgeführt wird. Der Zweck des Recyclings in diesem Bereich besteht hauptsächlich darin, den Konstantenpool zu recyceln und Klassen zu deinstallieren. Wenn der Speicherbereich nicht ausreicht, wird eine OutOfMemory-Ausnahme ausgelöst.

Laufzeitkonstantenpool: Teil des Methodenbereichs, Klassenversionen, Felder, Schnittstellen, Methoden usw. sowie verschiedene während der Kompilierung generierte Literale und Symbolreferenzen, die in diesem Bereich nach der kompilierten Klasse gespeichert werden geladen ist. Es wird eine OutOfMemory-Ausnahme ausgelöst.

6. Direkter Speicher

Direkter Speicher gehört nicht zum virtuellen Speicherbereich. Es handelt sich um eine IO-Methode, die auf Kanälen und Puffern basiert Ordnen Sie Off-Heap-Speicher direkt zu, speichern Sie die referenzierte externe Speicheradresse im Heap und vervollständigen Sie den Betrieb des direkt referenzierten Speichers durch Referenzen. Das nach 1.4 bereitgestellte NIO verbessert die Effizienz erheblich und vermeidet den Hin- und Her-Kopiervorgang zwischen Heap-Speicher und Nativer Speicher, der nicht vom Speicher der virtuellen Maschine gesteuert wird, löst eine OUTOfMemory-Ausnahme aus.

Empfohlene verwandte Artikel und Tutorials: Einführung in die Java-Entwicklung

Das obige ist der detaillierte Inhalt vonEine ausführliche Einführung in den JVM-Speicherdatenbereich. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage