首页 > 其他 > 详细

jvm:字节码执行流程

时间:2020-06-05 09:53:46      阅读:38      评论:0      收藏:0      [点我收藏+]

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栈帧

程序结束

 

jvm:字节码执行流程

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!