Carga de clase
La carga de clase se refiere a la lectura de datos binarios de la clase. Class. Class en la memoria, colocándolo en el área de método del área de datos de tiempo de ejecución y luego crear un objeto java.lang.class en el área de almacenamiento para usar la estructura de datos de los datos de la clase en el área del método.
Cómo cargar archivos .class:
1. Cargar directamente desde el sistema local
2. Descargue el archivo .class a través de Internet
3. Cargar archivos .class desde zip, jar, etc.
4. Extraer archivos .class de la base de datos patentada
5. Compilar dinámicamente los archivos de origen Java en archivos .class
El producto final de la carga de clase es un objeto de clase ubicado en el área de montón.
El objeto de clase encapsula la estructura de datos de la clase en el área del método y proporciona a los programadores de Java una interfaz para acceder a la estructura de datos en el área de método.
Hay dos tipos de cargadores de clase:
1. El cargador que viene con Java Virtualizer
Root Class Loader (Bootstrap)
Cargador de clase de extensión (extensión)
Cargador de clase del sistema o cargador de aplicaciones (sistema)
Los últimos dos cargadores se implementan en Java, y el cargador de clase raíz está escrito en C ++, y los programadores no pueden obtener esta clase en el código Java.
2. Cargador de clase definido por el usuario
Subclase de Java.Lang.ClassLoader
Los usuarios pueden personalizar el método de carga de la clase
El cargador de clase no necesita esperar hasta que se use activamente una clase antes de cargarla.
La especificación JVM permite que los cargadores de clase precargan una clase cuando esperan que se use. Informe un error (LinkageError). Si el programa no ha utilizado activamente esta clase, el cargador de clase no informará un error.
Mecanismo de desinstalación de clase
El ciclo de vida de una clase.
Cuando el objeto de clase que representa la clase de muestra ya no se hace referencia, es decir, no se puede tocar, el objeto de clase finalizará el ciclo de vida y los datos de la clase de muestra en el área del método también se descargarán, terminando así la vida ciclo de la clase de muestra.
Se puede ver que cuando una clase termina su ciclo de vida depende de cuándo el objeto de clase que lo representa termina su ciclo de vida.
Cargador de relación de referencia y objetos de clase:
En la implementación interna del cargador de clase, se utiliza una colección Java para almacenar referencias a la clase cargada.
Por otro lado, un objeto de clase siempre hace referencia a su cargador de clase. Llame al método getClassLoader () del objeto de clase para obtener su cargador de clase.
Se puede ver que existe una relación bidireccional entre la instancia de clase y el cargador que lo carga.
Objeto de clase, objeto de clase, objeto de instancia de clase:
Una instancia de una clase siempre se refiere al objeto de clase que representa la clase.
El método getClass () se define en la clase de objeto, que devuelve una referencia al objeto de clase que representa la clase a la que pertenece el objeto.
Además, todas las clases de Java tienen una clase de propiedad estática que hace referencia al objeto de clase que representa esta clase.
Desinstalar la clase
Las clases cargadas por el cargador de clase que vienen con la máquina virtual Java nunca se desinstalarán durante el ciclo de vida de la máquina virtual.
Como se mencionó anteriormente, los cargadores de clase que vienen con máquinas virtuales Java incluyen cargadores de clase raíz, cargadores de clase de extensión y cargadores de clase de sistema.
La máquina virtual Java en sí siempre hace referencia a estos cargadores de clase, y estos cargadores de clase siempre se refieren a los objetos de clase de la clase que cargan, por lo que siempre se pueden acceder a estos objetos de clase.
Las clases cargadas por cargadores de clase definidos por el usuario se pueden descargar.
Ejemplos específicos
La variable Loader1 y la variable OBJ aplican indirectamente el objeto de clase que representa la clase de muestra, mientras que la variable OBJClass lo hace referencia directamente.
Si las tres variables de referencia en el lado izquierdo de la imagen de arriba se establecen en NULL durante la operación del programa, el objeto de muestra finaliza su ciclo de vida, el objeto MyClassLoader finaliza su ciclo de vida y el objeto de clase que representa la clase de muestra también termina su vida. ciclo.
Cuando sea necesario nuevamente, verificará si el objeto de clase de la clase de muestra existe. se generará en el área de montón de la máquina virtual Java.