La carga de clases Java se divide en los siguientes tres pasos
- Cargue el archivo .class en la memoria
- Verificación de código de bytes, análisis de estructura de datos de clase, asignación de memoria
- Atributos estáticos y asignación inicial, ejecución de bloques estáticos.
Nota: Al cargar archivos de clase, solo se inicializan las variables de clase, los bloques de inicialización estática y las variables miembro estáticas. Los métodos de la clase solo se cargarán en el montón y no se inicializarán.
Formas de cargar clases
Java usa ClassLoader para cargar clases en la memoria. Java tiene los siguientes tres ClassLoader
- Bootstrap ClassLoader
Este es el cargador de clases superior y principalmente carga las clases requeridas por la JVM para su propio trabajo. - ExtClassLoader
este usuario carga la clase bajo la ruta de "java.ext.dirs" - AppClassLoader
es un cargador de clases ordinario utilizado para cargar clases en la ruta de classpath
Java ClassLoader es para garantizar que cada clase solo pueda cargarse una vez mediante el mecanismo de carga de nivel. Cuando cada ClassLoader carga una clase, primero llamará al ClassLoader superior para determinar si se ha cargado. Si no está cargado, y no debería haber cargado un classLoader superior, el ClassLoader actual cargará esta clase en la JVM.
Nota: jvm usa el nombre de clase completo de la instancia de Class + ClassLoader para cargar esta clase y determinar si esta clase ya existe. En otras palabras, la misma clase es cargada por diferentes instancias de ClassLoader (diferentes instancias de la misma clase de ClassLoader), y la JVM pensará que estas son dos clases diferentes.