深入理解Java虚拟机4~类文件结构

类文件结构这章内容很多,知识点也很散,此处总结以我感觉比较重要的语句记录为主。

1、Java虚拟机不和包括java在内的任何语言绑定,它只与Class文件,这种特定的二进制文件格式所关联。多种语言都可以把代码编译为Class文件。

2、Class文件格式:

类型名称解释
u4magic魔数,0xCAFEBABE,固定值
u2minor_version次版本号
u2major_version主版本号
u2constant_pool_count常量池容量计数值,从1开始,0特有用处
cp_infoconstant_pool常量池,从1开始
u2access_flags访问标志:类或接口的访问信息
u2this_class类索引
u2super_class父类索引
u2interfaces_count接口计数器
u2interfaces接口索引
u2fields_count 
field_infofields字段
u2methods_count 
method_infomethods方法
u2attribute_count1
attribute_infoattributes属性

3、字节码指令

加载和存储指令:

iload    iload_<n>   :将一个局部变量加载到操作栈,i代表int,其他类型与之类似,只有首字母不同。

istore  istore_<n>   :将一个数值从操作数栈存储到局部变量表,i代表int,其他类型与之类似,只有首字母不同。

iconst_<i>    lconst_<l>    :将一个常量加载到操作数栈。

运算指令:对两个操作数栈上的值进行某种特定运算,并把结果重新存入到操作栈顶。

iadd    isub    imul  idiv   irem   ineg   ishl   ior   iand   ixor   iinc

不再列举,讲了也记不住,来一个例子:如下所示:

这里写图片描述



istore_0:将栈顶元素存储到局部变量表slot0中

istore_1:将栈顶元素存储到局部变量表slot1中

istore_2:将栈顶元素存储到局部变量表slot2中

iload_0:将局部变量slot0的元素入栈

iload_1:将局部变量slot1的元素入栈

iconst_1:将常量1加载到操作数栈

iconst_2:将常量2加载到操作数栈

iadd:将iload_0和iload_1的两个数相加,并将结果放在栈顶


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值