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栈帧
程序结束