Regionale Aufteilung:
Während der Ausführung des Programms unterteilt die Java Virtual Machine den Speicher in mehrere Bereiche mit unterschiedlichen Funktionen, wie unten gezeigt:
Dieses Bild listet die verschiedenen Bereiche der Speicheraufteilung auf, darunter
Thread-privat: Programmzähler, Stapel der virtuellen Maschine, lokal Methodenstapel
Thread-shared: Heap, Methodenbereich
Im Folgenden werden die Funktionen und Funktionen jedes Bereichs einzeln vorgestellt
Programmzähler:
1. Der Programmzähler wird hauptsächlich verwendet, um auf die ausgeführte Bytecode-Zeilennummer zu verweisen. Jeder Thread verfügt über einen separaten Programmzähler, der nicht mit jedem geteilt wird Andere. Durch Ändern dieses Zählers Zeigen Sie auf die Bytecode-Zeilennummer, um das Programm auszuführen
2. Schleifen, Sprünge, Ausnahmebehandlung und andere Mechanismen sind alle auf diesen Zähler angewiesen, um abgeschlossen zu werden
3. Wenn die Das Programm führt ein Java-Programm aus. Wenn die native Methode ausgeführt wird, ist ihr Wert leer
Java Virtual Machine Stack:
1. Der Stapel der virtuellen Maschine ist für den Thread privat. Jede Methode erstellt bei der Ausführung einen Stapelrahmen, der zum Speichern von Informationen wie lokalen Variablentabellen, Methodenexits und dynamischen Links verwendet wird. und Operandenstapel. ,
2. Der Ausführungsprozess jeder Methode ist der Prozess eines Stapels einer virtuellen Maschine vom Einschieben bis zum Herausspringen
Viele Leute sagen oft, dass der Java-Speicher in Heap unterteilt ist Speicher und Stapelspeicher. Der Stapelspeicher bezieht sich auf den Stapel der virtuellen Maschine
. Die oben erwähnte lokale Variablentabelle speichert hauptsächlich die dem Compiler bekannten grundlegenden Datentypen (intbytecharlong usw.).
Erweiterung:
Objektreferenz: Nicht das Objekt selbst, es kann ein Referenzzeiger sein, der auf die Startadresse des Objekts zeigt, es kann ein Handle sein, das das Objekt oder andere verwandte Orte darstellt
returnaddress : ist kein Typ in der Java-API und kann von uns nicht aufgerufen werden. Es zeigt auf die Adresse einer Bytecode-Anweisung
Lokal Methodenstapel
Ähnlich wie beim Stapel der virtuellen Maschine ist es der Speicher, der native Methoden bedient
Java-Heap
Heap-Speicher ist ein Thread-Shared-Speicher. Sein Hauptzweck ist die Speicherung von Objekten und er ist auch der Hauptbereich, der vom Garbage Collector verwaltet wird.
Der Java-Heap ist unterteilt in die neue Generation und die alte Generation, insbesondere über den Garbage-Collection-Mechanismus. Wird in nachfolgenden Artikeln vorgestellt
Methodenbereich (auch Nicht-Heap genannt)
Es ist auch ein gemeinsam genutzter Speicher, der zum Speichern geladener Klasseninformationen, Konstanten, statischer Variablen, vom Just-in-Time-Compiler kompiliertem Code usw. verwendet wird.
Laufzeitkonstante pool: Es ist Teil des Methodenbereichs und wird zum Speichern verschiedener vom Compiler generierter Literale und Symbole verwendet. Zitat
Direkter Speicher:
Es ist nicht Teil des Laufzeitdatenbereichs der virtuellen Maschine und gehört nicht zum von der JVM verwalteten Speicher.
In NIO können Sie die native Funktion verwenden, um direkten Speicher direkt zuzuweisen Betreiben Sie es über das DirectByteBuffer-Objekt in Java als Referenz auf diesen Speicher
Vorteile: Spart die Schritte des Speicherkopierens und ist effizienter. Schnell
Nachteile: schwer zu steuern, leicht zu verursachender Speicher Lecks
Das obige ist der detaillierte Inhalt vonErweiterte JVM-Funktionen – Einführung in den Java-Speicherstrukturbereich. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!