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

表可以想象成数组

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

举例:

下面用该文件举例说明:

魔数:

文件版本号



常量池
常量池计数器


用字节码查看器可互证

常量池表:


字面量和符号引号:




常量池解读:
访问标识
ACC_PUBLIC
ACC_SUPER:只要是类就有SUPER的访问标识

21是相加起来的,ACC_PUBLIC加ACC_SUPER等于21

相互印证

字节码指令集
概述

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



字节码与数据类型,还有a,是引用数据类型。arraylength是求数组的长度,只能用于数组。

下图说明,因为一个槽位slot至少占4个字节

加载与存储指令,

压栈指令:第4个开始,就是iload 4、iload 5等等

图示说明,执行完第7步,num弹出,接着obj压入,以此类推

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



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


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

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

算术指令,
浙公网安备 33010602011771号