【Introducción al cargador de clase】
Se utiliza un cargador de clases para cargar archivos de clase en una máquina virtual JVM. Hay tres tipos de cargadores en JVM, cargador de clase Bootstrap, cargador de clase de extensión y cargador de clase de aplicación. Además, también puede heredar la clase Java.lang.ClassLoader para crear un cargador personalizado.
【Tipo de cargador de clase】
1. Bootstrap: no es una clase Java. Está escrito en C ++, incrustado en el kernel JVM, y se usa para llamar a la ejecución del código nativo usando JNI (JavanativeInterface). El cargador de clase de arranque es responsable de cargar la biblioteca de clase Java Core, como el archivo rt.jar en java_home/jre/lib. Este archivo JAR contiene algunas clases comunes como:
java.lang.system java.util.hashmap
2. ExtClassLoader: Heredado de la clase Java.lang.ClassLoader, utilizada para cargar el archivo JAR debajo de la ruta de extensión, la ruta de extensión es Java_Home/JRE/Lib/Ext
3. Cargador de clase de aplicación (AppClassLoader): hereda de la clase java.lang.classloader, utilizada para cargar la clase a continuación classpath. riendo a carcajadas
【Mecanismo de delegación del cargador de clase】
1. Cuando la aplicación necesita cargar una clase, el archivo ByTecode de la clase requerido se cargará en la ruta correspondiente en el orden de Bootstrap, ExtClassLoader y AppClassLoader.
2. Podemos compilar la clase personalizada en un archivo de clase y escribirlo en un paquete JAR, y colocarlo en la ruta java_home/jre/lib/ext. Cuando se carga el cargador de clase, se cargará desde la ruta java_home/jre/lib/ext utilizando el cargador de carga extirsal, y no se cargará debajo del classpath usando el cargador de carneros de appClassSass.
3. Después de usar el cargador de clase en orden de bootstrap, extclassloader, appClassLoader y no cargar la clase, la clase no se encontrará: java.lang.classnotfoundexception
【Demo de la aplicación】
1. Bootstrap: Escrito en C ++, incrustado en el núcleo JVM, no una clase de Java
ClassLoader Loader = System.Class.GetClassLoader (); System.out.println (cargador); //nulo
2.
ClassLoader Loader = ClassLoaderTest.class.getClassLoader (); System.out.println (loader.getClass (). GetName ()); //sun.misc.launcher$appclassloader
3.extClassLoader: se usa para cargar la clase Java en la ruta java_home/jre/lib/ext. Una vez encontrado, no se cargará en el classpath.
Escriba una clase Hello Hello personalizada, escriba en un paquete JAR y expórtelo a la ruta c: /programfiles/java/jdk1.7.0/jre/lib/ext/excelsoft.jar.
ClassLoader Loader = hello.class.getClassLoader (); System.out.println (loader.getClass (). GetName ()); //sun.misc.launcher$extClassLoader
===========================================
¡Los cargadores de clase son un tema relativamente complejo, solo para la introducción!
Resumir
Lo anterior es todo el contenido de este artículo sobre el análisis básico del cargador de clase JVM, y espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!