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!