1. Der Klassenlademechanismus
ist unterteilt in Laden, Verifizieren, Vorbereiten, Parsen, Initialisieren, Verwenden und Entladen.
(1) Laden
Durchsuchen Sie die Festplatte und lesen Sie die Bytecode-Datei über E/A. Sie wird geladen, wenn die Klasse verwendet wird, z. B. beim Aufrufen der main()-Methode der Klasse, eines neuen Objekts usw In der Ladephase wird ein java.lang.Class-Objekt geladen, das diese Klasse darstellt und als Zugriffspunkt für verschiedene Daten dieser Klasse im Methodenbereich dient.
(2) Überprüfen
Überprüfen Sie die Richtigkeit der Bytecode-Datei.
(3) Bereiten Sie sich darauf vor, den statischen Variablen der Klasse Speicher zuzuweisen und Standardwerte zuzuweisen.
(4) Analyse
Ersetzen Sie symbolische Referenzen durch direkte Referenzen. In dieser Phase werden einige statische Methoden (symbolische Referenzen, wie z. B. die Methode main()) durch Zeiger oder Handles ersetzt, die auf den Speicher zeigen, in dem die Daten gespeichert sind (. direkte Referenzen). Dies ist der sogenannte statische Verknüpfungsprozess (der während des Ladens der Klasse abgeschlossen wird, indem symbolische Referenzen durch direkte Referenzen ersetzt werden).
(5) Initialisierung
2. Der übergeordnete Delegationsmechanismusinitialisiert die statischen Variablen der Klasse auf den angegebenen Wert und führt den statischen Codeblock aus.
Der Anwendungsklassenlader AppClassLoader lädt den Quellcode des übergeordneten Delegierungsmechanismus der Klasse. Die LoadClass-Methode von AppClassLoader ruft schließlich die LoadClass-Methode ihrer übergeordneten Klasse ClassLoader auf:
Überprüfen Sie zunächst ob die Klasse mit dem angegebenen Namen geladen wurde. Wenn sie geladen wurde, ist es nicht erforderlich, sie erneut zu laden und direkt zurückzukehren.
Wenn diese Klasse nicht geladen wurde, prüfen Sie, ob ein übergeordneter Loader vorhanden ist. Wenn ein übergeordneter Loader vorhanden ist, wird er vom übergeordneten Loader geladen (also parent.loadClass(name, false); aufrufen). Oder rufen Sie zum Laden den Bootstrap-Klassenlader auf.
Wenn weder der übergeordnete Lader noch der Bootstrap-Klassenlader die angegebene Klasse findet, wird die findClass-Methode des aktuellen Klassenladers aufgerufen, um das Laden der Klasse abzuschließen.
3. Vollständiger Verantwortungsdelegierungsmechanismus„Volle Verantwortung“ bedeutet, dass, wenn ein ClassLoder eine Klasse lädt, die Klassen, von denen die Klasse abhängt, und Referenzen auch von diesem ClassLoder geladen werden, sofern nicht explizit ein anderer ClassLoder verwendet wird.
Das obige ist der detaillierte Inhalt vonWas sind die verschiedenen Mechanismen von JVM in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!