JVM - 基于栈的解释器的执行过程

1. 实验代码

public int calc() {
    int a = 100;
    int b = 200;
    int c = 300;
    return (a+b) * c;
}

2. 编译后的字节码片段

 public int calc();
    descriptor: ()I
    flags: ACC_PUBLIC
    Code:
      stack=2, locals=4, args_size=1
         0: bipush        100
         2: istore_1
         3: sipush        200
         6: istore_2
         7: sipush        300
        10: istore_3
        11: iload_1
        12: iload_2
        13: iadd
        14: iload_3
        15: imul
        16: ireturn

3. 执行过程

javap提示这段代码需要深度为2的操作数栈和4个Slot的局部变量空间。


执行偏移地址为0的指令的情况.png

执行偏移地址为1的指令的情况.png

执行偏移地址为11的指令的情况.png

执行偏移地址为12的指令的情况.png

执行偏移地址为13的指令的情况.png

执行偏移地址为14的指令的情况.png

执行偏移地址为16的指令的情况.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 执行引擎是Java虚拟机最核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两个机器都有代码执行...
    胡二囧阅读 923评论 2 2
  • 声明:本文摘抄自《深入理解Java虚拟机》一书,本文完全为自我学习,请感兴趣的同学购买正版,支持原创 Java语言...
    Chengyu_l阅读 1,244评论 0 1
  • Java byte code 的学习意义 为啥要学java bytecode,这就跟你问我已经会python了为...
    shanggl阅读 1,713评论 0 3
  • 第一次带宝宝出门逛商场,开心的不要不要的,小宝宝就是这样,看到花花绿绿的,看到可爱的玩偶,看到人来人往,看到一切新...
    卢辘轳阅读 327评论 0 0
  • 如果你二十多岁,别跟我提什么浪迹天涯,有本事的话,你去既可以朝九晚五,又能够浪迹天涯。 如果你已三十出头往四十上奔...
    深海里的晶晶Do阅读 261评论 0 0