【Einführung in den Klassenlader】
Ein Klassenloader wird verwendet, um Klassendateien in eine virtuelle JVM -Maschine zu laden. Es gibt drei Arten von Ladern in JVM, Bootstrap -Klassenlader, Erweiterungsklassenlader und Anwendungsklassenlader. Darüber hinaus können Sie auch die Klasse java.lang.classloader erben, um einen benutzerdefinierten Loader zu erstellen.
【Klassenladertyp】】
1. Bootstrap: Es ist keine Java -Klasse. Es ist in C ++ geschrieben, in den JVM -Kernel eingebettet und wird verwendet, um native Codeausführung mit JNI (JavanativeInterface) aufzurufen. Der Bootsklassenloader ist dafür verantwortlich, die Core Java -Klassenbibliothek zu laden, z. B. die RT.JAR -Datei unter java_home/jre/lib. Diese JAR -Datei enthält einige gemeinsame Klassen wie:
Java.lang.System Java.util.hashMap
2. Extclassloader: Von der Klasse java.lang.Classloader geerbt, verwendet zum Laden der JAR -Datei unter dem Erweiterungsweg.
3.. Anwendungsklassenlader (AppClassloader): Erben aus der Klasse java.lang.classloader, verwendet, um die Klasse unter dem Klassenpfad zu laden. laut lachen
【Delegationsmechanismus des Klassenladers】
1. Wenn die Anwendung eine Klasse laden muss, wird die Bytecode -Datei der erforderlichen Klasse in der Reihenfolge von Bootstrap, Extclassloader und AppClassloader unter den entsprechenden Pfad geladen.
2. Wir können die benutzerdefinierte Klasse in eine Klassendatei kompilieren und in ein JAR -Paket eingeben und sie in das java_home/jre/lib/ext Path platzieren. Wenn der Klassenlader geladen ist, wird er mit dem Extclassloader -Loader aus dem Lader des Extclassloaders aus dem Java_Home/jre/lib/ext -Pfad geladen und wird nicht unter dem ClassPath unter Verwendung des AppClassloader -Loaders geladen.
3.. Nachdem der Klassenlader in der Reihenfolge von Bootstrap, Extclassloader, AppClassloader und nicht geladen wird, wird die Klasse nicht gefunden: Java.lang.ClassnotFoundException
【Anwendungsdemo】】
1. Bootstrap: In C ++ geschrieben, in den JVM -Kernel eingebettet, keine Java -Klasse
Classloader loader = system.class.getClassloader (); System.out.println (Loader); // null
2. AppClassloader: Verwenden Sie den AppClassloader -Loader, um die Klasse unter dem Klassenpfad zu laden
Classloader loader = classLoloadtest.class.getClassloader (); System.out.println (lader.getClass (). GetName ()); //sun.misc.launchner$Appclassloader
3.ExtClassloader: Wird verwendet, um die Java -Klasse unter den Java_Home/JRE/lib/ext Path zu laden. Sobald es gefunden wurde, wird es nicht in den Klassenpfad geladen.
Schreiben Sie eine benutzerdefinierte Hallo -Klasse, geben Sie sie in ein JAR -Paket ein und exportieren Sie sie in die c: /programfiles/java/jdk1.7.0/jre/lib/ext/excelsoft.jar Path.
Classloader loader = hello.class.getClassloader (); System.out.println (lader.getClass (). GetName ()); //sun.misc.launchner $EXTCLASSOADER
===============================================
Klassenlader sind ein relativ komplexes Thema, nur für die Einführung!
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels über die grundlegende Analyse des Laders der JVM -Klasse, und ich hoffe, dass dies für alle hilfreich sein wird. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!