【Introduction au chargeur de classe】
Un Classloader est utilisé pour charger des fichiers de classe dans une machine virtuelle JVM. Il existe trois types de chargeurs dans JVM, le chargeur de classe bootstrap, le chargeur de classe d'extension et le chargeur de classe d'application. De plus, vous pouvez également hériter de la classe java.lang.classloader pour créer un chargeur personnalisé.
【Type de chargeur de classe】
1. Bootstrap: Ce n'est pas une classe Java. Il est écrit en C ++, intégré dans le noyau JVM, et est utilisé pour appeler l'exécution du code natif à l'aide de JNI (JavanativeInterface). Le chargeur de classe de démarrage est responsable du chargement de la bibliothèque de classe Java Core, comme le fichier RT.Jar sous Java_Home / Jre / Lib. Ce fichier JAR contient des classes communes telles que:
java.lang.system java.util.hashmap
2. ExtClassloader: Hérité de la classe java.lang.classloader, utilisé pour charger le fichier jar sous le chemin d'extension, le chemin d'extension est Java_Home / Jre / Lib / EXT
3. Application Class Loder (AppClassloader): Hérite de la classe java.lang.classloader, utilisée pour charger la classe ci-dessous ClassPath. rire aux éclats
【Mécanisme de délégation du chargeur de classe】
1. Lorsque l'application doit charger une classe, le fichier bytecode de la classe requis sera chargé sous le chemin d'accès correspondant dans l'ordre de Bootstrap, ExtClassloader et AppClassloader.
2. Nous pouvons compiler la classe personnalisée dans un fichier de classe et le taper dans un package JAR, et le placer sur le chemin Java_Home / Jre / Lib / EXT. Lorsque le chargeur de classe est chargé, il sera chargé à partir du chemin Java_Home / Jre / Lib / EXT à l'aide du chargeur EXTCLASSLOADODER, et ne sera pas chargé sous le CLASSPATH à l'aide du chargeur AppClassLoader.
3. Après avoir utilisé le chargeur de classe dans l'ordre de Bootstrap, ExtClassloader, AppClassloader et n'ayant pas chargé la classe, la classe ne sera pas trouvée: java.lang.classnotfoundException
【Demo d'application】
1.bootstrap: écrit en C ++, intégré dans le noyau JVM, pas une classe Java
Classloader Loader = System.class.getClassloadher (); System.out.println (chargeur); //nul
2. AppClassloader: utilisez le chargeur AppClassloader pour charger la classe ci-dessous ClassPath
Classloader loader = classloaderTest.class.getClassLoader (); System.out.println (Loader.getClass (). GetName ()); //sun.misc.Launcher$AppCLASSLOADER
3.ExtClassLoader: Utilisé pour charger la classe Java sous le chemin Java_Home / Jre / Lib / EXT. Une fois trouvé, il ne sera pas chargé dans le chemin de classe.
Écrivez une classe Hello personnalisée, tapez-la dans un package JAR et exportez-la vers le c: /programfiles/java/jdk1.7.0/jre/lib/ext/excelsoft.jar Path.
Classloader Loader = Hello.class.getClassOLODOFer (); System.out.println (Loader.getClass (). GetName ()); //sun.misc.Launcher$ExtClassloadher
========================================================.
Les chargeurs de classe sont un sujet relativement complexe, juste pour l'introduction!
Résumer
Ce qui précède est tout le contenu de cet article sur l'analyse de base du chargeur de classe JVM, et j'espère que cela sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!