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