一、虚拟机栈
注意:这里采用布局变量表和虚拟机栈来解释本案例,虚拟机栈和局部变量表都处于虚拟机栈中
如下图, java内存结构除了虚拟机栈之外还有本地方法栈、程序计数器、堆、方法区等其他内存区域。
二、代码操作
public class T {
public static void main(String[] args) {
int a=1;
int b=a++;
System.out.println(b);
}
}
用javac命令编译此文件
javac T.java
效果如下(产生了字节码文件 T.class)
再用javap -c命令反编译此字节码文件(查看里边的指令代码)
javap -c T
结果如下:
Compiled from "T.java"
public class T {
public T();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_1 //把1放入操作数栈//-1到5之间用iconst指令 -1指令是iconst_m1 2是iconst_2
1: istore_1//让操作数栈里顶层元素出栈并存入到局部变量表的第1个位置(第0位是main的参数数组)
2: iload_1 //将局部变量表的第1个位置的数据加载到操作数栈的顶层
3: iinc 1, 1 //将局部变量表的第1个位置的数据increase,1(innc是自增指令)//将a的值自增1
6: istore_2 //将操作数栈里顶层元素1出栈并存入局部变量表的第2个位置(变量b中存1)
7: getstatic #2 //Field System.out:Ljava/io/PrintStream;取System的PrintStream out静态变量
10: iload_2 //将局部变量表的第2个位置的数据加载到操作数栈的顶层
11: invokevirtual #3 // Method java/io/PrintStream.println:(I)V 调用虚拟机的println()
14: return //返回操作数的顶层数据用println()打印出来
}
(11条消息) JVM指令详解(下)_Robin Hu的专栏-CSDN博客_jvm指令详解
-----------------------------------------------------------------------------------------------------------------------------
2022-03-02-zhaoyq