03JVM_Carga de clases

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...

 

Supongo que te gusta

Origin blog.csdn.net/jbkjhji/article/details/132799964
Recomendado
Clasificación