虚拟机执行子系统

一.class类文件结构

使用HexView查看

u4:         magic                   cafebebe(魔术)
u2:         minor_version           0x00
u2:         major_version           0x34
u2:         constant_pool_count     oxDA(-1即为常量数量)
cp_info:    constant_pool                   
...

常量池 constant_pool

存放两大类常量:
字面量: 如文本字符,什么为final的常量值
符号引用:
1.类和接口的权限名
2.字段的名称和描述符
3.方法的名称和描述符

java代码在javac编译的时候,并不像C和C++那么样有连接,而是在jvm加载Class文件的时候进行动态的连接
,也就是说Class文件不会保存各个方法,字段的最终内存信息,因为这些字段,方法的符号引用不经过晚期转换的话
无法得到真正的内存入口地址,也就无法直接被虚拟机使用,当虚拟机运行的时候,需要从常量池,获得对应的符号引用,
再在类创建时或运行时解析,翻译到具体的内存地址中

常量值的项目类型

类型 标志 描述
CONSTANT_Utf8_info 1 utf8编码的字符串
CONSTANT_Integer_info 3 整型字面量
CONSTANT_Float_info 4
CONSTANT_Long_info 5
CONSTANT_Double_info 6
CONSTANT_Class_info 7 类或接口引用
CONSTANT_String_info 8
CONSTANT_Fieldref_info 9 字段的符号引用
CONSTANT_Methodref_info 10 方法的符号引用
CONSTANT_InterfaceMethodref_info 11 接口方法的的符号引用
CONSTANT_NameAndType_info 12 字段或符号的部分符号引用
CONSTANT_MethodHandle_info 15 方法句柄
CONSTANT_MethodType_info 16 表示方法类型
CONSTANT_InvorkDynamicg_info 18 动态方法的执行点

二.字节码指令

results matching ""

    No results matching ""