aprendizaje JVM (1): mecanismo de carga de clases

Estructura clase File Análisis:

En línea para ver los artículos sobre la clase de Java escribir archivo de análisis más exhaustivo:

https://www.jianshu.com/p/247e2475fc3a

http://tech.dianwoda.com/2018/03/28/jvm-classjie-xi-wen-jian-ge-shi/

https://blog.csdn.net/hywo125/article/details/90770393

 

mecanismo de carga Clase:

Paso uno: Load

1. Obtener un flujo de bytes binaria

2. Estructura de almacenamiento estático en un método de área de estructura de datos en tiempo de ejecución

área de datos en tiempo de ejecución son: Métodos de Distrito, Pila], [pila de la máquina virtual, pilas de métodos nativos, contador de programa]

3. La pila genera un objeto de clase en Java, como un método de acceso a la zona de entrada

 

Segundo paso: Verificar

1. Verificar Clase ID archivo: Número Orlando Magic: cafebabe

2. Verificar que el número de versión del archivo de clase

3. Verificar la piscina constante (tipo constante, constante de estructura de tipo de datos es correcta, UTF-8 cumple con los estándares)

Cada parte del archivo 4.Class (campo de tabla, tablas de métodos, etc.) son correctas

La validación de metadatos (verificación de los padres de clase, la herencia de validación, la validación final de campo, etc.)

6. Verificación de código de bytes, el paso compleja (comando de verificación) más

7. La verificación símbolo de referencia (verificación por el símbolo de referencia para encontrar si los campos, métodos, clases)

 

Durante la verificación de error se enviarán a:

IncompatibleClassChangeError ---> Error en el archivo de clase

No soportado versión mayor.menor xx.x ---> versión tiene problemas (a menudo denominado problema de la versión JDK)

IllgalAccessError; NoSuchFieldError; NoSuchMethodError etc.

 

El tercer paso: Preparación

Asignar memoria para las variables de clase conjunto y variables de clase de inicialización de fase, sólo las variables de clase estáticos para la asignación de memoria

 

例: (1) static int n = 1, (2) static final int n = 2;

A diferencia de inicialización:

(1) Después de la inicialización, el valor de inicialización es 0, no 2, porque en ese momento no se ha ejecutado ningún método Java, bloques estáticos y finalmente llamado CLINT

(2) corresponde al caso en que la piscina constante (ConstantValue), n en la fase de preparación ha sido asignado a 2

 

Las variables de instancia y las diferencias de las variables de clase:

Las variables de clase: generalmente se conoce como variables estáticas

Ejemplos de variables: cuando se crea una instancia de un objeto, las variables de instancia creados con la creación de objetos, junto con la destrucción del objeto y destruyen

 

Paso cuatro: Parse

El análisis de las referencias simbólicas, la referencia simbólica se convierte en una referencia directa

Referencia directa: el objetivo es un puntero o compensar

 

Principalmente consiste en: clases, interfaces, campos, métodos y otros

Los siguientes tipos:

CONSTANT_Class_info

CONSTANT_Field_info

CONSTANT_Methodref_info

CONSTANT_InterfaceMethodred_info

CONSTANT_MethodType_info

CONSTANT_MethodHandler_info

CONSTANT_InvokeDynamic_info

 

1. El campo de análisis:

En esta clase para encontrar que no hay campo coincidente ---> Si la clase tiene una interfaz, la interfaz para encontrar una coincidencia con el campo superior ---> Buscar matriz

Por ejemplo:

clase A se extiende B implementos C, D {
 privado str cadena; 
}

Buscar orden: primero en la clase A (tipo actual) de encontrar, y luego encontrar a partir de C, Clase D (interfaz de matriz), el siguiente en la clase B (padre) para encontrar, finalmente, para encontrar la clase Object

No se puede encontrar se quejará: java.lang.NoSuchFieldError

Si encontrar, pero no tiene permiso (privado): java.lang.illegalAccessError

 

2. El método de análisis de clase:

clase A se extiende B implementos C, D {
 privado  void test () { 
...... 
} 
}

En esta clase hay maneras de encontrar que no hay método de emparejamiento si el padre no va a buscar una coincidencia, no encuentra el método de interfaz que ir dentro de encontrar una lista de correspondencia

Si no se encuentra esta clase, la interfaz de encontrar, a continuación, esta clase se explica: clase abstracta abstracta

Si no se encuentra el error: java.lang.NoSuchMethodError

Si encontrar, pero no tiene permiso (privado): java.lang.illegalAccessError

 

3. El método de interfaz de análisis:

En esta clase hay un método que no encuentra una coincidencia, a continuación, en el recursiva interfaz de búsqueda de los padres

Si no se encuentra el error: java.lang.NoSuchMethodError

La interfaz en general no es privada, así que no hay illegalAccessError

 

Paso cinco: inicialización

Inicialización <init> clase

<Clinit> variables estáticas, bloque de inicialización estática, si no hay variables estáticas y el bloque de código, entonces no Clint

Por ejemplo, el código siguiente:

clase A {
  static  int i = 2 ; // Clint
  estática {// Clint 
   System.out.println ( "Hello World!" ); 
 } 
 Int n; // init 
}

 

Paso 6:

Necesidad de explicar

 

Paso siete: Desinstalar

Detrás de recolección de basura para aprender

 

de verificación de arriba, la preparación, también conocido como la conexión de análisis de tres pasos

Supongo que te gusta

Origin www.cnblogs.com/xuyiqing/p/12466415.html
Recomendado
Clasificación