Klassenbelastung
Das Laden der Klasse bezieht sich auf das Lesen von Binärdaten aus der Klasse -Klassendatei in den Speicher, in den Methodenbereich des Laufzeitbereichs und dann ein java.lang.class -Objekt im Haufenbereich, um die Datenstruktur zu verwenden. der Klasse im Methodenbereich.
So laden Sie. Class -Dateien:
1. Laden Sie direkt aus dem lokalen System
2. Laden Sie die .class -Datei über das Internet herunter
3. Laden Sie .Classdateien aus Reißverschluss, Glas usw.
4. Class -Dateien aus proprietärer Datenbank extrahieren
5. Kompilieren Sie Java -Quelldateien dynamisch in .class -Dateien
Das Endprodukt der Klassenbelastung ist ein Klassenobjekt im Haufen.
Das Klassenobjekt verkauft die Datenstruktur der Klasse im Methodenbereich und bietet JAVA -Programmierern eine Schnittstelle, um auf die Datenstruktur im Methodenbereich zuzugreifen.
Es gibt zwei Arten von Klassenladerladern:
1. Der Lader, der mit Java Virtualizer geliefert wird
Root Class Loader (Bootstrap)
Verlängerungsklassenlader (Erweiterung)
Systemklassenlader oder Anwendungslader (System)
Die beiden letztgenannten Lader sind in Java implementiert, und der Root -Class -Loader ist in C ++ geschrieben, und Programmierer können diese Klasse nicht im Java -Code erhalten.
2. Benutzerdefinierter Klassenlader
Unterklasse von Java.lang.Classloader
Benutzer können die Lademethode der Klasse anpassen
Der Klassenloader muss nicht warten, bis eine Klasse vor dem Laden zuerst aktiv verwendet wird.
Die JVM -Spezifikation ermöglicht es Klassenladern, eine Klasse vorzuladen, wenn sie erwartet, dass sie verwendet wird. Einen Fehler melden (LinkageError). Wenn diese Klasse vom Programm nicht aktiv verwendet wurde, meldet der Klassenlader keinen Fehler.
Klassen -Deinstallationsmechanismus
Der Lebenszyklus einer Klasse.
Wenn das Klassenobjekt, das die Beispielklasse darstellt Zyklus der Stichprobenklasse.
Es ist ersichtlich, dass, wenn eine Klasse endet, ihr Lebenszyklus abhängt, wenn das Klassenobjekt, das sie darstellt, ihren Lebenszyklus beendet.
Referenzbeziehungslader und Klassenobjekte:
Bei der internen Implementierung des Klassenladers wird eine Java -Sammlung verwendet, um Verweise auf die geladene Klasse zu speichern.
Andererseits verweist ein Klassenobjekt immer seinen Klassenlader. Rufen Sie die Methode GetClassLoader () des Klassenobjekts auf, um den Klassenlader zu erhalten.
Es ist ersichtlich, dass es eine bidirektionale Beziehung zwischen der Klasseninstanz und dem Lader gibt, der sie lädt.
Klassenobjekt, Klassenobjekt, Klasseninstanzobjekt:
Eine Instanz einer Klasse bezieht sich immer auf das Klassenobjekt, das die Klasse darstellt.
Die GetClass () -Methode ist in der Objektklasse definiert, die einen Verweis auf das Klassenobjekt zurückgibt, das die Klasse darstellt, zu der das Objekt gehört.
Darüber hinaus verfügen alle Java -Klassen über eine statische Eigenschaftsklasse, die das Klassenobjekt verweist, das diese Klasse darstellt.
Deinstallieren der Klasse
Klassen, die vom Klassenlader geladen werden, der mit der Java Virtual Machine geliefert wird, werden während des Lebenszyklus der virtuellen Maschine niemals deinstalliert.
Wie bereits erwähnt, enthalten die Klassenlader, die mit Java -virtuellen Maschinen ausgestattet sind, Root -Klassenlader, Erweiterungsklassenlader und Systemklassenlader.
Die java -virtuelle Maschine selbst verweist immer auf diese Klassenlader, und diese Klassenlader verweisen immer auf die Klassenobjekte der von ihnen geladenen Klasse, sodass diese Klassenobjekte immer zugänglich sind.
Klassen, die von benutzerdefinierten Klassenladern geladen werden, können entladen werden.
Spezifische Beispiele
Die Loader1 -Variable und die OBJ -Variable wenden das Klassenobjekt, das die Beispielklasse darstellt, indirekt an, während die Obj -Class -Variable sie direkt verweist.
Wenn die drei Referenzvariablen auf der linken Seite des obigen Bildes während des Programmvorgangs auf Null gesetzt werden Zyklus.
Wenn es erneut notwendig ist, wird es überprüft, ob das Klassenobjekt der Stichprobenklasse vorhanden ist. wird im Haufenbereich der Java Virtual Machine generiert.