Klassenladevorgang: 1. Ladephase; 3. Vorbereitungsphase, die haupts?chlich Speicher zuweist und Klassenvariablen im Methodenbereich initialisiert; 5. Initialisierungsphase; In der Klassendatei deklarierte Variablen und statische Bereiche werden zusammengeführt, um die Cinit-Methode zu generieren und aufzurufen. 6. Verwendungsphase. 7. Deinstallationsphase.
Die Betriebsumgebung dieses Tutorials: Windows7-System, Java8-Version, DELL G3-Computer.
Um den Klassenladeprozess von JVM zu verstehen, müssen wir haupts?chlich zwei Fragen beantworten:
1 Wann wird die Klasse geladen?
2. Wie die Klasse geladen wird.
1. Bedingungen zum Ausl?sen des Klassenladens:
Der Klassenladeprozess ist haupts?chlich in sieben Phasen unterteilt: Laden, überprüfung, Vorbereitung, Analyse, Initialisierung, Verwendung, Entladen; Laden, überprüfung, Vorbereitung, Die Reihenfolge der fünf Prozesse zum Initialisieren und Entladen muss strikt eingehalten werden. JVM legt nicht den Zeitpunkt des Ladens der Klasse fest, schreibt jedoch strikt vor, dass die Klasse sofort initialisiert werden muss Das. .
1. Wenn Sie auf die vier Anweisungen new, getstatic, putstatic und invokestatic sto?en und die Klasse nicht initialisiert wurde, wird die Klasse zuerst initialisiert.
2. Wenn Sie die Methode des Pakets java.lang.reflect verwenden, um einen reflektierenden Aufruf an eine Klasse durchzuführen, wird ihre Initialisierung ausgel?st, wenn die Klasse nicht initialisiert wurde.
3. Wenn beim Initialisieren einer Klasse die übergeordnete Klasse der Klasse nicht initialisiert wurde, wird zuerst die Initialisierung ihrer übergeordneten Klasse ausgel?st.
4. Um die JVM auszuführen, müssen Sie eine Hauptklasse angeben, die die Hauptmethode enth?lt. Die virtuelle Maschine initialisiert diese Klasse.
5. Bei Verwendung der dynamischen Sprachunterstützung von Jdk1.7, wenn das endgültige Analyseergebnis einer java.lang.invoke.MethodHandle-Instanz das Methodenhandle von REF_getstatic, REF_putstatic, REF_inokestatic ist und die diesem Methodenhandle entsprechende Klasse hat nicht initialisiert, l?sen Sie die Initialisierung dieser Klasse aus.
2. Klassenladeprozess
Der Klassenladeprozess ist haupts?chlich in sieben Phasen unterteilt: Laden, überprüfung, Vorbereitung, Analyse, Initialisierung, Verwendung und Entladen.
1. Laden:
1) Laden Sie den einer Klasse entsprechenden Bin?rbyte-Stream über seinen vollst?ndig qualifizierten Namen. Haupts?chlich durch Klassenlader implementiert.
2) Konvertieren Sie die durch den Bytestream dargestellte statische Speicherstruktur in die Laufzeitdatenstruktur des Methodenbereichs.
3) Generieren Sie ein java.lang.Class-Objekt, das diese Klasse im Speicher darstellt und als Eingang für jede Klasse im Methodenbereich dient, um auf diese Klasse zuzugreifen. (Hotspot generiert diese Klasse im Methodenbereich).
2. überprüfung:
1), überprüfung des Dateiformats: überprüfen Sie, ob die magische Versionsnummernkonstante der Klassendatei innerhalb des von der aktuellen virtuellen Maschine unterstützten Bereichs liegt.
2), Metadatenüberprüfung: überprüfen Sie, ob die semantischen Informationen der Klasse den Anforderungen der Java-Sprachspezifikation entsprechen.
3), Bytecode-überprüfung: Stellen Sie sicher, dass die Programmsemantik legal und konform ist. Haupts?chlich durch die Stackmapframe-Struktur.
4) überprüfung der Symbolreferenz: Die virtuelle Maschine wandelt die Symbolreferenz in eine direkte Referenz um und überprüft, ob die durch den vollst?ndig qualifizierten Namen der Symbolreferenz dargestellte Klasse gefunden werden kann, ob die entsprechende Dom?ne und Methode gefunden werden kann und ob Die Zugangsberechtigung ist legal.
3. Vorbereitung:
Die Vorbereitungsphase besteht haupts?chlich darin, Speicher zuzuweisen und Klassenvariablen (modifiziert durch statische Modifikatoren) im Methodenbereich zu initialisieren.
Datentyp | Nullwert | Datentyp | Nullwert |
---|---|---|---|
int | 0 | boolean | false |
long | 0L | float | 0.0f |
short | 0 | double | 0.0d |
char | 'u0000' | reference | null |
byte. | 0 |
4. Parsing:
1) Klassen- oder Schnittstellenparsing: Konforme Referenzen in direkte Referenzen auf Klassen umwandeln und Zugriffsberechtigungen prüfen.
2) Feldanalyse: Konvertieren Sie die symbolische Referenz des Felds in die Klasseninformationen, zu der das Feld geh?rt, oder eine direkte Referenz auf das Feld seiner übergeordneten Klasse und überprüfen Sie die Zugriffsberechtigungen.
3) Parsen von Klassenmethoden: Konvertieren Sie die symbolische Referenz der Klassenmethode in die Klasseninformationen, zu denen die Klassenmethode geh?rt, oder in eine direkte Referenz auf das Feld ihrer übergeordneten Klasse und überprüfen Sie die Zugriffsberechtigungen.
4) Analyse der Schnittstellenmethode: Konvertieren Sie die symbolische Referenz der Schnittstellenmethode in die Schnittstelleninformationen, zu denen die Schnittstellenmethode geh?rt, oder in eine direkte Referenz auf das Feld ihrer übergeordneten Klasse und überprüfen Sie die Zugriffsberechtigungen.
5. Initialisierung:
In der Initialisierungsphase führt der Compiler die in der Klassendatei deklarierten statischen Zuweisungsvariablen und statischen Bereiche zusammen, um die Methode
Klassenlader: Ein Klassenlader ist eine Implementierung des ?Ladens des bin?ren Bytestroms einer Klasse über ihren vollst?ndig qualifizierten Namen“. Für jede Klasse wird die virtuelle Eindeutigkeit gemeinsam vom Klassenlader und der Klasse selbst bestimmt Maschine.
Parentales Delegationsmodell:
1. Bootstrap ClassLoader startet den Klassenlader und ist für das Laden von
2. Die Erweiterung ClassLoader erweitert den Klassenlader und ist für das Laden verantwortlich
3. Der Anwendungsklassenlader ist für das Laden der JAVA-Klassenbibliothek unter dem CLASSPATH-Pfad verantwortlich.
4. Benutzer-Klassenlader Benutzerdefinierter Klassenlader.
Das übergeordnete Delegationsmodell l?dt Klassen auf diese Weise: Wenn der Klassenlader eine Anforderung zum Laden einer Klasse erh?lt, delegiert er zun?chst die übergeordnete Klasse, um die Klasse zu laden. Alle Klassenlader verwenden diese Methode, sodass alle Klassenladeanforderungen die Klasse erreichen übergeordnete Klasse der obersten Ebene. Wenn die übergeordnete Klasse nicht geladen werden kann, verwenden Sie diesen Klassenlader, um sie zu laden. Auf diese Weise besteht eine hierarchische Beziehung zwischen den Klassenladern, die sicherstellen kann, dass die Basisklassen von Java von demselben Klassenlader geladen werden, was eine entscheidende Rolle für die Stabilit?t des Java-Systems spielt.
Empfehlungen für entsprechende Video-Tutorials: Java-Video-Tutorial
Das obige ist der detaillierte Inhalt vonWas sind die Phasen des JVM-Klassenladevorgangs?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)