JVM análisis de la estructura del archivo de clase (indicador de acceso, anormal)

1, la bandera de acceso

(1) concepto

Inmediatamente después de la piscina constante de dos bytes, una interfaz para la identificación de una jerarquía de clases o la información de acceso, incluyendo la clase o interfaz a estar cansado, si el tipo de público, tipo abstracto, clase se declara final y similares

Tabla de banderines (2) Acceso:

Nombre Valor Bandera Bandera Significado
ACC_PUBLIC     0x0001        si el tipo de público
ACC_FINAL      0x0010        tanto si se declara final, sólo las clases se pueden establecer
ACC_SUPER      0x0020 si se debe permitir el uso de instrucciones de código de bytes invokespecial nueva semántica, instrucciones invokespecial semánticas había cambiado en el JDK 1.0.2, 
con el fin de distinguir el uso de la semántica, que esta instrucción, JDK 1.0 esta bandera después .2 clases compiladas se debe ser cierto ACC_INTERFACE 0x0200 logo que es una interfaz ACC_ABSTRACT 0x0400 si el tipo abstracto, interfaz o clase abstracta para ello, esta bandera es verdadera, la otra clase es falsa ACC_SYNTHETIC 0x1000 identifica el código de clase no es generado por el usuario ACC_ANNOTATION 0x2000 identifica esto es un comentario ACC_ENUM logotipo de 0x4000, que es una enumeración

(3) banderas de control de acceso:

Inmediatamente después de la parte de la piscina constante:

 

 

 En combinación con la tabla anterior, se puede extraer es modificado público para ver el código fuente:

público  de clase Estudiante {
     privado String nombre;
    privada edad Integer;

(4) Tipo de índice, índice de interfaz y el índice de matriz

El orden de: Índice Class (u2), el índice de matriz (u2) en el conjunto de índice de interfaz (primer tipo de interfaz es contador u2 indica el índice de capacidad de la mesa, es decir, implementos varias interfaces, si se aplica sin ninguna interfaz, el valor es cero, este último no ocupan ningún byte índice de interfaz), los archivos de clases integradas para determinar la relación de esta clase con tres, si hay una interfaz, estará detrás de la interfaz.

 

 

 fuente:

público  de clase mytest extiende rosca implementos Serializable, Comparable {

(5) Propiedades de máquina virtual tabla de especificación de la estructura y predefinidos propiedades:

estructura de la tabla de campo:

Las variables utilizadas para describir la interfaz o declaradas en la clase, incluyendo las variables de nivel de clase a nivel de campo y variables de instancia, pero no se incluyen en las variables locales declaradas dentro del método, nombre del campo, por favor, tipos por qué el campo se define no son fijas, por lo que sólo las constantes referencias a la piscina constante se pueden describir.

Número Nombre Tipo
access_flags U2         . 1 especificador de acceso (por ejemplo: 
público) U2 name_index           . 1 nombre de índice (tales como: inc 
es) U2 descriptor_index     . 1 descriptores (por ejemplo :()) ----- inc se int público 
() U2 attributes_count     1.   
attribute_info Atributos attributes_count

hoja de propiedades:

Número Nombre Tipo
attribute_name_index U2     un nombre de atributo índice 
u4 attribute_length     longitud atributo 1 
u1 info attribute_length no es igual a 2 + 4 + 1, es igual a u2 + U4 + u1 * 190 = 196

VM predefinido atributos:

 Nombre Ubicación Uso Significado
 Código Código método de la tabla de Java se compila en instrucciones de código de bytes
 ConstantValue campo mesa final palabras clave definidas piscina constante
 clases desaprobadas, métodos, mesa campos se declara como obsoletos y los campos de
 Excepciones Excepciones arrojados Métodos Método 
 archivo de clase EnclosingMethod sólo cuando una clase es una clase local o anónimo es una clase con el fin de tener esta propiedad, que se utiliza para identificar la ubicación del método de clase periférica 
 InnerClass archivo de clase dentro de la lista de clases 
 Código LineNumberTable atributo correspondencia relación de los números de línea de código fuente de Java y la instrucción de código de bytes 
 Método atributo Código LocalVariableTable local se describirá lobo 
 atributo jdk1.6 Código StackMapTable en los nuevos atributos para el nuevo tipo de inspección y pruebas para comprobar las variables locales y un objetivo procesamiento de operandos en la necesidad de un método de coincidencias de clases 
 Firma tabla de métodos de clase, mesa de campo para el caso de mantenimiento de la firma método genérico
 archivo de clase SourceFile registra el nombre del archivo de origen 
 SourceDebugExtension archivo de clase se utiliza para almacenar información adicional de depuración 
 tabla de métodos de clase sintética, método de la tabla de campo o campo compilador bandera generan automáticamente 
 firmas de clase LocalVariableTypeTable en lugar de utilizar el descriptor es describir un genérico tipos parametrizados se añade después de la introducción de la gramática genéricos 
 RuntimeVisibleAnnotations clases, métodos, mesas, mesa de campos proporciona soporte para la anotación dinámico 
 tabla RuntimeInvisibleAnnotations, la tabla de métodos, mesa de campo para indicar que las anotaciones son runtime invisible 
 tabla de métodos RuntimeVisibleParameterAnnotation con RuntimeVisibleAnnotations propiedades papel similar, pero el papel de los métodos de objeto
 RuntimeInvisibleParameterAnnotation tabla de métodos de roles y RuntimeInvisibleAnnotations similares propiedades, actuando como un parámetro del método que es el objeto
 AnnotationDefault método de anotación por defecto para la grabación de una serie de elementos de tierras mesa 
 BootstrapMethods guían camino para el almacenamiento de archivos de clase de instrucciones hace referencia calificador invokeddynamic  

El número de variables y métodos locales pila profunda (6) Método

 

2, anormal

(1) Tabla de excepción:

Número Tipo Nombre
start_pc u2        1 
end_pc u2        1 
handle_pc u2       1 
catch_pc u2     1

(2) Ejemplo:

00 00 00 04 00 08 00 02 ------ 0 4 8 # 2

El manejo de excepciones se divide en dos: lanzar y tratar .... retén (bloque)

 

salto 0-4 filas anormal a la línea XVII ... ... 

 

 

 

 resumen:

(1) profundidad de la pila y número:

Deep Stack: pila

El número de variables locales: locales

(2) parámetros:

 

Los datos que describen las clases: (3) Metadatos

(4) Nombre de clase: no puede exceder 256

 

Supongo que te gusta

Origin www.cnblogs.com/zhai1997/p/12565905.html
Recomendado
Clasificación