1. Carga de clases y tecnología de código de bytes
1. Estructura del archivo de clase
2. Instrucciones de código de bytes
3. Procesamiento del tiempo de compilación
4. Fase de carga de clases
5. Cargador de clases
6. Optimización del tiempo de ejecución
1. Estructura del archivo de clase
Estructura de archivos de clase
1.1 Magia de números mágicos
introducir
Los primeros 4 bytes de cada archivo de clase java son el número mágico: 0x CAFEBABE . La función del número mágico es distinguir entre archivos de clase Java y archivos de clase que no son Java.
1.2 Versión versión_menor, versión_mayor
introducir
4 ~ 7 bytes, que indican la versión de clase 00 34 (hexadecimal convertido a decimal es 52), que indica java8
51 java7
52 java8
53 java9
1.3 Grupo constante
introducir
Almacenar literales (cadenas de texto, constantes finales) y referencias de símbolos (nombres de paquetes, nombres de clases)
①8 ~ 9 bytes, los 2 bytes del contador del grupo constante representan la longitud del grupo constante. 00 23 (35 decimal) significa que hay entre 1 y 34 elementos.
②Los siguientes n bytes (1-grupo constante-1) son la tabla del grupo constante, que almacena literales (cadenas, valores constantes finales) y referencias de símbolos (clases, métodos, descriptores de campo) .
1.4 Acceso a información de identificación y herencia
1.access_flags : los 2 caracteres después del final del grupo constante son las banderas de acceso
Determine si esta clase es una clase o una interfaz...
Después de consultar la tabla, sabemos que 00 21 es una combinación de 0x0020+0x0001, por lo que es una clase pública.
2.this_class : 2 bytes, ¿cuál es el nombre de la clase actual?
00 03 representa el elemento número 3 del grupo constante, que debe leerse del grupo constante.
3.super_class : 2 bytes, cuál es el nombre de la clase principal.
00 04 representa el elemento número 4 del grupo constante, que debe leerse del grupo constante.
4. Colección de interfaces
①interfaces_count: 2 bytes, el número de interfaces implementadas
00 00La interfaz no está implementada
②interfaces[interfaces_count]: 2 bytes, ¿cuáles son las interfaces?
1.5 Colección de mesas de campo
campos
La tabla de campos representa las variables declaradas, los nombres de los campos y los tipos de los campos. Descripción constante por referencia al grupo constante
1.fields_count (contador de campos)
2 bytes, que indican el número de variables miembro.
2.campos[] tabla de campos
Estructura de la tabla de campo
Significado de la tabla de campos
00 02: Bandera de acceso, consulte la tabla de arriba, privado
00 05: Nombre del campo, verifique el grupo constante #5
00 06: Tipo de datos de campo, verifique el grupo constante #6
00 00: contador de atributos
00 02: Recogida de bienes
1.6 Colección de tablas de métodos
métodos:
① Apunta a una colección de índices de grupo constante. Cada método_info corresponde a información sobre una clase o interfaz.
②El modificador de acceso del método, el valor de retorno del método y la información del parámetro del método.
1. contador del método methods_count
2 bytes, el número de métodos.
00 02: Hay 2 métodos
2. métodos[] tabla de métodos
Información del método de almacenamiento
lista detallada
1.7 Colección de tablas de atributos adicionales
introducir
El nombre del archivo fuente del archivo de clase...