jvm:字节码执行流程

1、源代码

public class MyTest {
    public static void main(String[] args) {
        int a=10;
        int b=Short.MAX_VALUE+1;
        int c=a+b;
        System.out.println(c);
    }
}

2、编译后的字节码文件

 3、加载

(1)常量池中的字节码载入到运行时常量池:

(2)方法的字节码载入到方法区:

 4、main线程开始运行,分配栈桢内存

(1)栈内存的分配

 局部变量表:4

最大操作数栈的深度为:2

(2)执行istore_1指令:

 将常量10放入到1号槽位

(3)lcd #3

Short.MAX_VALUE+1是在编译时期就已经计算好了的,lcd命令将计算后的数字放入到操作数栈中

(4)istore 2

将栈顶的数据弹出,放到二号位置

(5)iload_1和iload_2

分别将局部变量表一号位置和二号位置的数据读取到操作数栈中:

 

 (6)iadd

弹出操作数,并将计算结果存入到操作数栈中

 (7)istore_3

5、getstatic #4

 将System.out的引用地址存放到操作数栈中

6、iload_3

7、invokevirtual  #5

 找到常量池#5项

定位到方法区的方法

生成新的栈帧并传递参数,执行栈帧中的字节码

8、return

完成main方法调用,弹出main栈帧

程序结束

原文地址:https://www.cnblogs.com/zhai1997/p/13047615.html