JAVA虚拟机学习记录数据(六)字节码文件详解

JAVA虚拟机学习记录数据(六)字节码文件详解

预热:

字节码文件

image
表可以想象成数组
image

字节码文件的结构
u表示一个字节,一个字节表示两位十六进制数。
image
举例:
image

下面用该文件举例说明:
image

魔数:
image

文件版本号
image
image

image

常量池

常量池计数器
image
image
用字节码查看器可互证
image

常量池表:
image
image
字面量和符号引号:
image
image
image
image

常量池解读:

访问标识
ACC_PUBLIC
ACC_SUPER:只要是类就有SUPER的访问标识
image
21是相加起来的,ACC_PUBLIC加ACC_SUPER等于21
image
相互印证
image

字节码指令集
概述
image

温习操作数栈和局部变量表
image
image
image

字节码与数据类型,还有a,是引用数据类型。arraylength是求数组的长度,只能用于数组。
image
下图说明,因为一个槽位slot至少占4个字节
image

加载与存储指令,
image
压栈指令:第4个开始,就是iload 4、iload 5等等
image
图示说明,执行完第7步,num弹出,接着obj压入,以此类推
image

常量入栈指令,const、push、ldc、ldc_w指令操作的数字依次变大。比如int i=1 使用iconst_1,int j = 6 使用bipush 6,int f 32768使用ldc 32768
image
image
image

举例,将常量压入栈,然后将栈的数据存储到局部变量表(istore_1)。
image
image

存储指令(出栈装入局部变量表指令)
image

举例:注意操作数栈,操作完后操作数需要弹出,比如k+2后面要弹出,其他的以此类推。
image

算术指令,

posted @ 2026-01-28 13:34  cdc321  阅读(1)  评论(0)    收藏  举报