Heim > Java > javaLernprogramm > Java – detaillierte Erläuterung des Klassenladevorgangs

Java – detaillierte Erläuterung des Klassenladevorgangs

php是最好的语言
Freigeben: 2018-08-10 13:57:48
Original
2226 Leute haben es durchsucht

1. Laden

1. Erhalten Sie den binären Bytestream, der diese Klasse definiert, über den vollständig qualifizierten Namen einer Klasse.

2. Konvertieren Sie die durch diesen Bytestream dargestellte statische Speicherstruktur in eine Laufzeitdatenstruktur im Methodenbereich.

3. Generieren Sie ein java.lang.Class-Objekt, das diese Klasse im Speicher darstellt, als Zugriffseintrag für verschiedene Daten dieser Klasse im Methodenbereich.

2. Überprüfung

1. Dateiformatüberprüfung

Überprüfen Sie, ob der Byte-Stream der Klassendateiformatspezifikation entspricht und von verwendet werden kann aktuelle Version der Verarbeitung virtueller Maschinen.

2. Metadatenüberprüfung

Führen Sie eine semantische Analyse der Bytecode-Sekundeninformationen durch, um sicherzustellen, dass die darin beschriebenen Informationen der Java-Sprachspezifikation entsprechen Anforderungen.

3. Bytecode-Überprüfung

Durch Datenfluss- und Kontrollflussanalyse wird festgestellt, dass die Programmsemantik legal und logisch ist . Nach der zweiten Überprüfungsrunde der Datentypen in den Metadateninformationen werden in dieser Phase die Klassenmethoden überprüft und analysiert, um sicherzustellen, dass die Methoden der überprüften Klasse während der Laufzeit keine Ereignisse verursachen, die die Sicherheit der virtuellen Maschine gefährden . .

4. Symbolreferenzüberprüfung

Führen Sie eine Übereinstimmungsüberprüfung für andere Informationen als die Klasse selbst durch (verschiedene Symbolreferenzen im Konstantenpool) , um sicherzustellen, dass die Analyseaktion ausgeführt wird Wenn die Symbolreferenzüberprüfung nicht bestanden werden kann, wird eine Ausnahme ausgelöst.

3. Vorbereitung

Dies ist die Phase der formalen Zuweisung von Speicher für Klassenvariablen und der Festlegung des Anfangswerts der Klassenvariablen. Der von diesen Variablen verwendete Speicher wird im Methodenbereich zugewiesen.

Zu diesem Zeitpunkt umfasst die Speicherzuweisung nur Klassenvariablen (durch statische Variablen geänderte Variablen), keine Instanzvariablen, die dem Java-Heap zusammen mit dem Objekt zugewiesen werden, wenn das Objekt instanziiert wird Die Klassenvariable weist die Klassenvariable nicht dem endgültigen Initialisierungswert zu, sondern weist sie nur dem Nullwert des Datentyps zu.

Beispiel: öffentlicher statischer int-Wert = 123; in der Vorbereitungsphase wird dem Wert nur der Nullwert von int zugewiesen, der 0 ist, nicht 123 (123 wird nach der Kompilierung des Programms zugewiesen)

4. Parsing

Die Parsing-Phase ist der Prozess, bei dem die virtuelle Maschine die Symbolreferenzen im Konstantenpool durch direkte Referenzen ersetzt.

Die Symbolreferenz kann jede Form von Literal sein, die je nach virtueller Maschine unterschiedlich sein kann, aber alle können das Ziel lokalisieren und sind in der Klassendatei definiert.

Eine direkte Referenz ist ein Zeiger, der direkt auf das Ziel zeigen kann, ein relativer Offset oder ein Handle, der das Ziel indirekt lokalisieren kann.

5. Initialisierung

In der Initialisierungsphase beginnt die Ausführung des definierten Java-Programmcodes. In dieser Phase initialisiert der Programmierer Klassenvariablen und andere Ressourcen anhand eines vom Programm erstellten subjektiven Plans.

Die eigentliche Zuweisung erfolgt in dieser Phase , dem öffentlichen statischen int-Wert=123 in der Vorbereitungsphase. In dieser Phase wird der Wert nun 123 zugewiesen

verwandt Empfohlen:

Detaillierte grafische Erklärung des Prozesses des JVM-Ladens einer Klasse

Analyse der Ladereihenfolge von Klassen in Java (häufig verwendet in Interviewfragen)

Das obige ist der detaillierte Inhalt vonJava – detaillierte Erläuterung des Klassenladevorgangs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
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