详解 JVM 字节码(8)

作者: zidea | 来源:发表于2019-05-04 13:01 被阅读31次
jvm

字节码的执行方式,
程序执行有两种是编译执行和解释执行,JIT 编译产生本地代码生成机器码来执行。现在的 JVM 解释执行和编译执行结合来运行程序。

  • 解释执行,将通过解释器读取字节码遇到相应的指令就该执行该指令
  • 编译执行,通过JIT编译器将字节码转换为本地机器码来执行;现代 JVM 会根据代码热点来生成机器码。
stack=2, locals=5, args_size=1
         0: iconst_0
         1: istore_1
         2: iconst_1
         3: istore_2
         4: iconst_2
         5: istore_3
         6: iconst_3
         7: istore        4
         9: iload_2
        10: iload_3
        11: iadd
        12: iload         4
        14: imul
        15: iload_2
        16: isub
        17: istore_1
        18: iload_1
        19: ireturn

  • iconst_0 将 result 0 推送到操作数栈顶
  • istore_1 将 1 必须是当前栈帧的局部变量的索引,并且栈顶的类型必须为 int 然后将栈顶弹出赋值给局部变量第 1 的变量设置为弹出的值。0 位置局部变量位置为 this。
    下面到 6 以此类推
    iconst_1 是将 1 入栈 -> 然后 istore_2 是从栈弹出栈顶的1(也就是刚刚入栈的 1)放置到局部变量表(类似数组)的第 2 个位置。
局部变量表
  • iload_2 :将索引为 2 的局部变量放置到栈顶,栈顶为 1
  • iload_3 :将索引为 3 的局部变量放置到栈顶,栈顶为 2
  • iadd :完成 int 加法,不接收参数,参数是从操作数栈顶依次弹出进行完加法重新放置到
    栈顶
  • iload 4 将索引为 4 的局部变量放置到栈顶
  • imul :进行 int 的乘法
    ...
  • istore_1 将结构保存到索引为 1 的局部变量也就是(result)

相关文章

  • JVM

    JVM 基础-类字节码详解 多语言编译为字节码在 JVM 运行 Java 字节码文件-- Class文件的结构属性...

  • 详解 JVM 字节码(8)

    字节码的执行方式,程序执行有两种是编译执行和解释执行,JIT 编译产生本地代码生成机器码来执行。现在的 JVM 解...

  • JVM知识精粹

    1.jvm执行字节码文件 流程:jvm通过类加载器加载字节码文件----字节码校验器---翻译字节码(解释执行,反...

  • Java并发机制的底层原理

    Java程序执行:Java代码→Java字节码→字节码被类加载器加载到JVM里,JVM执行字节码→转化为汇编指令在...

  • Java并发机制的底层实现原理

        Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为...

  • 详解 JVM 字节码 (1)

    在开始分析 class 字节码前我们先补一补一些基础知识,帮助我们更好地了解 jvm 是如何执行字节码的。大家可能...

  • 详解 JVM 字节码(3)

    版本信息 上一次我们分析前 4 个字节为魔数,继续向下数 4 字节为版本号信息(前两个字节表示此版本号,后两个字节...

  • 详解 JVM 字节码(2)

    什么是字节码,为什么需要字节码编译 JVM 编译成机器码, 我们看一看 Java 编译过程 java 源码 编译为...

  • 详解 JVM 字节码(Four)

    访问标志 访问标志信息包括该 Class 文件是类还是接口,是否被定义成 public,是否是 abstract,...

  • 详解 JVM 字节码(5)

    今天进入最关键也是最重要部分方法表,也是有一定难度。 定义方法访问标记00 01 :表示一个 public 方法,...

网友评论

    本文标题:详解 JVM 字节码(8)

    本文链接:https://www.haomeiwen.com/subject/jocznqtx.html