Inhaltsverzeichnis
Laufzeitspeicher umfasst:
Wenn der Thread eine Java-Methode ausführt, zeichnet dieser Zähler die Adresse der ausgeführten Bytecode-Anweisung der virtuellen Maschine auf. Wenn es sich um eine native Methode handelt, ist der Zählerwert leer.
Der Stapel bezieht sich im Allgemeinen auf den Stapel der virtuellen Maschine oder den Teil der lokalen Variablentabelle des Stapels der virtuellen Maschine.
Für die meisten Anwendungen ist der Heap der größte Speicherbereich, der von der virtuellen Maschine verwaltet wird.
Der Java-Heap ist der Hauptbereich, der vom Garbage Collector verwaltet wird. Da moderne Collectors grundsätzlich die Striped-Collection-Methode verwenden, kann der Java-Heap auch in neue Generation und alte Generation unterteilt werden.
Laufzeitkonstantenpool
Erstellung von Objekten
Speicherlayout von Objekten
Objektzugriffspositionierung (P48)
Heim Java javaLernprogramm Eine eingehende Analyse der Speicherverwaltung in Java Virtual Machines

Eine eingehende Analyse der Speicherverwaltung in Java Virtual Machines

Sep 12, 2018 pm 03:17 PM
java虚拟机

Dieser Artikel bietet Ihnen eine ausführliche Analyse der Speicherverwaltung in Java Virtual Machines. Ich hoffe, dass er für Freunde hilfreich ist.

Laufzeitspeicher umfasst:

  1. Methodenbereich

  2. Virtual Machine Stack (VM Stack)

  3. Native Method Stack (Native Method Stack) Heap)

  4. Programmzähler registrieren

  5. Programmzähler
  6. ist ein Vergleich. Der geringe Speicherplatz kann als Zeilennummernindikator für den vom aktuellen Thread ausgeführten Bytecode angesehen werden. (Der Bytecode-Interpreter funktioniert, indem er den Wert dieses Zählers ändert, um die Bytecode-Anweisungen auszuwählen, die ausgeführt werden müssen.)

  7. Da das Multithreading der Java Virtual Machine durch abwechselndes Wechseln von Threads und Zuweisen von Prozessorausführungszeit implementiert wird, führt ein Prozessor zu jedem Zeitpunkt nur Anweisungen in einem Thread aus. Um nach dem Threadwechsel zur korrekten Ausführungsposition zurückzukehren, muss daher jeder Thread über einen unabhängigen Programmzähler verfügen. Die Zähler zwischen den einzelnen Threads beeinflussen sich nicht gegenseitig und werden unabhängig voneinander gespeichert „der Erinnerung.

Wenn der Thread eine Java-Methode ausführt, zeichnet dieser Zähler die Adresse der ausgeführten Bytecode-Anweisung der virtuellen Maschine auf. Wenn es sich um eine native Methode handelt, ist der Zählerwert leer.

Java Virtual Machine Stack

Der Java Virtual Machine Stack ist ebenfalls Thread-privat und hat denselben Lebenszyklus wie der Thread.

Der Stapel der virtuellen Maschine stellt das Speichermodell der Ausführung dar: Wenn jede Methode ausgeführt wird, wird ein Stapelrahmen erstellt, um lokale Variablentabellen, Operandenstapel, dynamische Links, Methodenausgänge und andere Informationen zu speichern. Der Prozess vom Aufruf bis zum Abschluss der Ausführung jeder Methode entspricht dem Prozess, bei dem ein Stapelrahmen in den Stapel geschoben und aus dem Stapel in der virtuellen Maschine herausgeholt wird.

Der Stapel bezieht sich im Allgemeinen auf den Stapel der virtuellen Maschine oder den Teil der lokalen Variablentabelle des Stapels der virtuellen Maschine.

Die lokale Variablentabelle speichert verschiedene grundlegende Datentypen, die zur Kompilierungszeit bekannt sind, Objektreferenzen und returnAddress-Typen (die auf die Adresse einer Bytecode-Anweisung zeigen).

Unter diesen belegen Daten vom Typ „Long“ und „Double“ zwei lokale Variablenräume (Slots), während andere Datentypen nur einen belegen.

Der von der lokalen Variablentabelle benötigte Speicherplatz wird zur Kompilierzeit zugewiesen. Bei der Eingabe einer Methode wird die Menge an lokalem Skalarraum, den die Methode im Frame zuweisen muss, vollständig bestimmt und ändert sich während der Kompilierung nicht Ausführung der Methode. Die Größe der lokalen Variablentabelle.

Die Spezifikation der virtuellen Maschine legt zwei Ausnahmebedingungen für diesen Bereich fest: Wenn die vom Thread angeforderte Stapeltiefe größer ist als die von der virtuellen Maschine zulässige Tiefe, wird eine StackOverflowError-Ausnahme ausgelöst, wenn der Stapel der virtuellen Maschine dies kann dynamisch erweitert werden, wenn die Erweiterung Wenn nicht genügend Speicher beantragt werden kann, wird eine OutOfMemoryError-Ausnahme ausgelöst.

Lokaler Methodenstapel

Die Rolle des virtuellen Maschinenstapels ist sehr ähnlich. Der lokale Methodenstapel bedient die von der virtuellen Maschine verwendeten nativen Methoden. Es gibt keine verbindlichen Regeln zu Sprache, Verwendung und Datenstrukturen in nativen Methoden.

Java-Heap

Für die meisten Anwendungen ist der Heap der größte Speicherbereich, der von der virtuellen Maschine verwaltet wird.

Der Heap ist ein von allen Threads gemeinsam genutzter Speicherbereich und wird beim Start der virtuellen Maschine erstellt. Der einzige Zweck dieses Speicherbereichs besteht darin, Objektinstanzen zu speichern, und fast allen Objektinstanzen wird hier Speicher zugewiesen (alle Objektinstanzen und Arrays).

Der Java-Heap ist der Hauptbereich, der vom Garbage Collector verwaltet wird. Da moderne Collectors grundsätzlich die Striped-Collection-Methode verwenden, kann der Java-Heap auch in neue Generation und alte Generation unterteilt werden.

Aus Sicht der Speicherzuweisung kann der Thread-gemeinsame Java-Heap in mehrere Thread-private Zuweisungspuffer (Thread Local Allocation Buffer, TLAB) unterteilt werden.

Der Java-Heap kann physisch diskontinuierlichen Speicherplatz verarbeiten, solange er logisch kontinuierlich ist. Bei der Implementierung kann es als feste Größe oder skalierbar implementiert werden, gängige virtuelle Maschinen werden jedoch als skalierbar implementiert (-Xms, -Xmx-Steuerung).

Methodenbereich

Wie der Java-Heap handelt es sich um einen von jedem Thread gemeinsam genutzten Speicherbereich. Er wird zum Speichern von Klasseninformationen, Konstanten, statischen Variablen und Just-in-Time-Compilern verwendet Informationen, die vom Code der virtuellen Maschine geladen wurden, und andere Daten. Obwohl die Java Virtual Machine den Methodenbereich als logischen Teil des Heaps beschreibt, verfügt sie über einen Alias ​​namens Non-Heap, um ihn vom Java-Heap zu unterscheiden.

Zusätzlich dazu, dass kein zusammenhängender Speicher wie beim Java-Heap erforderlich ist und die Option einer festen Größe oder Erweiterbarkeit besteht, können Sie sich auch dafür entscheiden, keine Garbage Collection zu implementieren. Die Garbage Collection findet in diesem Bereich selten statt, existiert aber nicht dauerhaft wie die ewige Generation nach dem Betreten des Methodenbereichs. Das Speicherrecycling in diesem Bereich zielt hauptsächlich auf das Recycling der konstanten Pool- und Entladetypen ab.

Laufzeitkonstantenpool

ist Teil des Methodenbereichs. Neben der Klassenversion, Feldern, Methoden, Schnittstellen und anderen Informationen enthält die Klassendatei Informationen. Eine weitere Information ist die Konstantenpooltabelle, die für verschiedene während der Kompilierung generierte Literale und Symbolreferenzen verwendet wird. Dieser Inhalt wird nach dem Laden der Klasse im Laufzeitkonstantenpool gespeichert.

Es ist dynamisch. Nur der Inhalt des in der Klassendatei vorinstallierten Konstantenpools kann während der Laufzeit in den Pool eingefügt werden Developers. ist die intern() der String-Klasse.

Erstellung von Objekten

Wenn die virtuelle Maschine eine neue Anweisung erhält, prüft sie zunächst, ob die Parameter dieser Anweisung im gefunden werden können Konstantenpool. Ein symbolischer Verweis auf eine Klasse. Er prüft, ob die durch diesen symbolischen Verweis dargestellte Klasse geladen, aufgelöst und initialisiert wurde. Wenn nicht, muss zuerst der entsprechende Klassenladevorgang durchgeführt werden.

Reservieren Sie Speicher für neue Objekte nach der Klassenladeprüfung. Die von einem Objekt benötigte Speichermenge wird vollständig bestimmt, nachdem die Klasse geladen wurde.

Nachdem die Speicherzuweisung abgeschlossen ist, wird der Speicherplatz, der der virtuellen Maschine zugewiesen werden muss, auf Null initialisiert. Wenn TLAB verwendet wird, kann diese Arbeit im Voraus ausgeführt werden, wenn TLAB zugewiesen wird.

Als nächstes nimmt die virtuelle Maschine die notwendigen Einstellungen für das Objekt vor, z. B. von welcher Klasse das Objekt eine Instanz ist, wie man die Metadateninformationen der Klasse findet, den Hash-Code des Objekts und das Alter der GC-Generierung des Objekts und andere Informationen. Diese Informationen werden im Objektheader des Objekts platziert.

Nach Abschluss des vorherigen Schritts ist die Aufgabe für die virtuelle Maschine abgeschlossen, aber aus Sicht des Java-Programms hat die Objekterstellung gerade erst begonnen und wurde noch nicht ausgeführt.

Speicherlayout von Objekten

Das Layout des Objektspeichers im Speicher kann in drei Teile unterteilt werden: Objektkopf, Instanzdaten und Ausrichtungsfüllung.

Der Objektheader der virtuellen HotSpot-Maschine besteht aus zwei Teilen:

1. Speichert die Laufzeitdaten des Objekts selbst, wie Hash, GC-Generierungsalter, Sperrstatus-Flag und Thread Haltesperre, voreingenommene Thread-ID, voreingenommener Zeitstempel usw. Die Datenlänge in virtuellen 32-Bit- und 64-Bit-Maschinen beträgt 32 Bit bzw. 64 Bit, was offiziell als „Mark Word“ bezeichnet wird.

2. Typzeiger, der der Zeiger auf die Klassenmetadaten des Objekts ist. Die virtuelle Maschine verwendet diesen Zeiger, um zu bestimmen, zu welcher Klasse das Objekt gehört. Wenn es sich bei dem Objekt um ein Java-Array handelt, muss im Objektheader ein Datenelement vorhanden sein, um die Länge des Arrays aufzuzeichnen, da die virtuelle Maschine die Größe des Java-Objekts anhand der Metadaten gewöhnlicher Java-Objekte bestimmen kann, dies jedoch nicht Bestimmen Sie die Größe des Arrays anhand der Metadaten.

Objektzugriffspositionierung (P48)

Referenzdaten auf dem Java-Programmstapel können über die folgenden zwei gängigen Methoden auf Objektinstanzen im Heap zugreifen.

Handle: Im Java-Heap wird ein Teil des Speichers zugewiesen, der als Handle verwendet wird. Die Referenz speichert die Handle-Adresse dieses Objekts. Das Handle enthält die spezifischen Eigenschaften der Objektinstanzdaten und Typdaten.

Direkter Zeiger: Beim Java-Heap-Objektlayout müssen Sie überlegen, wie Sie den Zugriff auf typdatenbezogene Informationen verhindern können.

Verwandte Empfehlungen:

Detaillierte Einführung in den von der Java Virtual Machine verwalteten Speicherlaufzeitdatenbereich

Detaillierte Erläuterung von JAVA mit Bildern und Text Wissen über virtuelle Maschinen – JVM-Speichermodell

Das obige ist der detaillierte Inhalt vonEine eingehende Analyse der Speicherverwaltung in Java Virtual Machines. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Umfassende Anleitung: Detaillierter Java Virtual Machine-Installationsprozess Umfassende Anleitung: Detaillierter Java Virtual Machine-Installationsprozess Jan 24, 2024 am 09:02 AM

Grundlagen für die Java-Entwicklung: Detaillierte Erläuterung der Installationsschritte für virtuelle Java-Maschinen, spezifische Codebeispiele erforderlich. Mit der Entwicklung der Informatik und Technologie ist die Java-Sprache zu einer der am weitesten verbreiteten Programmiersprachen geworden. Es bietet die Vorteile einer plattformübergreifenden und objektorientierten Sprache und hat sich nach und nach zur bevorzugten Sprache für Entwickler entwickelt. Bevor Sie Java für die Entwicklung verwenden, müssen Sie zunächst die Java Virtual Machine (JavaVirtualMachine, JVM) installieren. In diesem Artikel werden die Installationsschritte der Java Virtual Machine ausführlich erläutert und spezifische Codebeispiele bereitgestellt.

Verwenden Sie das Pagoda Panel, um die Konfiguration der Java Virtual Machine zu optimieren Verwenden Sie das Pagoda Panel, um die Konfiguration der Java Virtual Machine zu optimieren Jun 21, 2023 pm 02:52 PM

Mit der kontinuierlichen Entwicklung des Internets erfordern immer mehr Anwendungen und Unternehmen den Einsatz von Programmen, die in der Java-Sprache entwickelt wurden. Für die Ausführung von Java-Programmen ist die Leistung der Java Virtual Machine (JVM) sehr wichtig. Daher ist die Optimierung der Konfiguration ein wichtiges Mittel zur Verbesserung der Leistung von Java-Anwendungen. Das Pagoda-Panel ist ein häufig verwendetes Server-Kontrollfeld, mit dem Benutzer Server bequemer verwalten können. In diesem Artikel wird erläutert, wie Sie mit dem Pagoda-Bedienfeld die Konfiguration der Java Virtual Machine optimieren. Schritt eins: Installieren Sie die Java Virtual Machine

Wie nutzt die Java Virtual Machine die Referenzzählung für die Speicherverwaltung? Wie nutzt die Java Virtual Machine die Referenzzählung für die Speicherverwaltung? Apr 13, 2024 am 11:42 AM

Die Java Virtual Machine verwendet die Referenzzählung, um die Speichernutzung zu verwalten. Wenn der Referenzzähler eines Objekts 0 erreicht, führt die JVM eine Speicherbereinigung durch. Der Referenzzählmechanismus umfasst: Jedes Objekt verfügt über einen Zähler, der die Anzahl der Referenzen speichert, die auf das Objekt verweisen. Beim Erstellen des Objekts wird der Referenzzähler auf 1 gesetzt. Wenn ein Objekt referenziert wird, wird der Referenzzähler erhöht. Wenn die Referenz endet, wird der Referenzzähler dekrementiert.

Struktur und Funktion des Stapelrahmens in der Java Virtual Machine Struktur und Funktion des Stapelrahmens in der Java Virtual Machine Apr 14, 2024 am 08:03 AM

Der Stapelrahmen ist die grundlegende Datenstruktur zum Ausführen von Methoden in der Java Virtual Machine (JVM) und umfasst die folgenden Teile: Lokale Variablentabelle: speichert die lokalen Variablen der Methode. Operandenstapel: speichert Operanden und Zwischenergebnisse. Rahmendaten: Enthält Rücksprungadresse und aktuellen Programmzähler. Zu den Funktionen des Stapelrahmens gehören: Speichern lokaler Variablen. Operandenoperationen durchführen. Behandeln Sie Methodenaufrufe. Helfen Sie bei der Ausnahmebehandlung. Unterstützte Müllabfuhr.

Entmystifizierung des Funktionsprinzips von JVM: Eingehende Untersuchung der Prinzipien der Java Virtual Machine Entmystifizierung des Funktionsprinzips von JVM: Eingehende Untersuchung der Prinzipien der Java Virtual Machine Feb 18, 2024 pm 12:28 PM

Ausführliche Erläuterung der JVM-Prinzipien: Für eine eingehende Untersuchung des Funktionsprinzips der Java Virtual Machine sind spezifische Codebeispiele erforderlich ) ist auch in der Softwareentwicklung nicht mehr wegzudenken. Als Ausführungsumgebung für Java-Programme kann JVM plattformübergreifende Funktionen bereitstellen, sodass Java-Programme auf verschiedenen Betriebssystemen ausgeführt werden können. In diesem Artikel werden wir uns mit der Funktionsweise der JVM befassen

Kernelemente der Java-Technologie: vertiefte Kenntnisse der Java-Sprache, der Java Virtual Machine und der Java SE-Bibliotheken Kernelemente der Java-Technologie: vertiefte Kenntnisse der Java-Sprache, der Java Virtual Machine und der Java SE-Bibliotheken Dec 26, 2023 am 10:28 AM

Java-Kerntechnologie-Stack: Vertieftes Verständnis der Java-Sprache, der Java Virtual Machine und der JavaSE-Bibliothek. Mit der kontinuierlichen Entwicklung der Informatik und Technologie hat sich die Java-Sprache zu einer der beliebtesten Programmiersprachen der Welt entwickelt. Als plattformübergreifende Programmiersprache auf hoher Ebene wird Java in verschiedenen Bereichen häufig verwendet, insbesondere in der Anwendungsentwicklung auf Unternehmensebene und im Cloud Computing. Um ein ausgezeichneter Java-Entwickler zu werden, müssen Sie den Java-Kerntechnologie-Stack beherrschen, nämlich die Java-Sprache, die Java Virtual Machine und Java

Ausführliche Erläuterung des Installationsprozesses der Java Virtual Machine: Lernen Sie die Installationsschritte Schritt für Schritt kennen Ausführliche Erläuterung des Installationsprozesses der Java Virtual Machine: Lernen Sie die Installationsschritte Schritt für Schritt kennen Jan 05, 2024 pm 03:58 PM

Java Virtual Machine-Installationshandbuch: Bringen Sie Ihnen Schritt für Schritt bei, wie Sie installieren. Es sind spezifische Codebeispiele erforderlich. Einführung: Java Virtual Machine (JavaVirtualMachine, als JVM bezeichnet) ist eine virtuelle Maschine, die Java-Bytecode ausführen kann. Es ist eine Kernkomponente der Java-Technologie und der Schlüssel dafür, dass Java-Anwendungen plattformübergreifend ausgeführt werden können. In diesem Artikel zeigen wir Ihnen Schritt für Schritt, wie Sie eine Java Virtual Machine installieren und stellen Ihnen konkrete Codebeispiele zur Verfügung, die Ihnen den schnellen Einstieg erleichtern. 1. Laden Sie JavaDev herunter

Umfassende Installations- und Konfigurationsanleitung für die Java Virtual Machine Umfassende Installations- und Konfigurationsanleitung für die Java Virtual Machine Jan 05, 2024 pm 02:03 PM

Von vorne beginnen: Detaillierte Erläuterung der Installation und Konfiguration der Java Virtual Machine [Einführung] Java ist eine plattformübergreifende Programmiersprache, und ihre Ausführungsplattform hängt von der Java Virtual Machine (JavaVirtualMachine, JVM) ab. Durch die Installation und Konfiguration der Java Virtual Machine können Sie Java-Programme auf verschiedenen Betriebssystemen ausführen. In diesem Artikel erfahren Sie von Grund auf, wie Sie eine Java Virtual Machine installieren und konfigurieren und stellen einige häufig verwendete Java-Codebeispiele bereit. Fangen wir an zu lernen! [Teil 1: J

See all articles