企业网站空间费用一年多少,wordpress怎么社交分享,wordpress超级排版,链接网站logo#x1f40c;个人主页#xff1a; #x1f40c; 叶落闲庭 #x1f4a8;我的专栏#xff1a;#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也#xff0c;而不可夺坚#xff1b;丹可磨也#xff0c;而不可夺赤。 JVM 一、字节码文件的组成部分1.1 iconst_0… 个人主页 叶落闲庭 我的专栏 c语言 数据结构 javaEE 操作系统 Redis 石可破也而不可夺坚丹可磨也而不可夺赤。 JVM 一、字节码文件的组成部分1.1 iconst_01.2 istore_11.3 iload_11.4 iconst_11.5 iadd1.6 istore_21.7 return 二、执行i 操作2.1 iconst_02.2 istore_12.3 iinc 1 by 12.4 return 三、字节码常用工具javap -v命令 一、字节码文件的组成部分
操作数栈是临时存放数据的地方局部变量表是存放方法中的局部变量的位置 观察如下代码的字节码文件 int i 0;
int j i 1;具体的java源代码
public static void main(String[] args) {int i 0;int j i 1;
}要想看到java的字节码文件的内容可以通过jclasslib这个工具来看运行以上代码然后通过jclasslib可以看到在这个方法中变量的存放位置其中局部变量表数组的0索引位置存放的是main方法的参数 args ,1索引位置存放的是第一个变量 i 2索引存放的是第二个变量 j 可以看出定义在方法中的变量方法的参数也将作为这个方法的变量存入局部变量表中定义在方法内的变量会按定义的先后顺序依次存入局部变量表中。 接下来解析这段代码的字节码文件 iconst_0将常量0放入到操作数栈中istore_1将操作数栈中的值取出放入局部变量表索引为1的位置iload_1将局部变量表索引为1的位置的值复制一份放入到操作数栈中iconst_1将常量1放入到操作数栈中iadd将操作数栈中最上面的两个值相加并把结果存放在栈中istore_2将操作数栈中的值取出放入局部变量表索引为2的位置return方法结束返回 1.1 iconst_0 1.2 istore_1 1.3 iload_1 1.4 iconst_1 1.5 iadd 1.6 istore_2 1.7 return 二、执行i 操作
源代码
public static void main(String[] args) {int i 0;i;
}字节码 iconst_0:将常量0放入操作数栈中 istore_1:将操作数栈中的值取出放入索引为1的局部变量表中 iinc 1 by 1:在局部变量表索引为1的位置增加1 return:方法结束返回
2.1 iconst_0 2.2 istore_1 2.3 iinc 1 by 1 根据JVM规范iinc就是通过一个常量递增局部变量 2.4 return 三、字节码常用工具javap -v命令 javap是JDK自带的反编译工具可以通过控制台查看字节码文件的内容。 适合在服务器上查看字节码文件内容。 直接输入javap查看所有参数。 输入javap-v字节码文件名称查看具体的字节码信息。如果jar包需要先使用jar-vf命令解压