`
lijingyao8206
  • 浏览: 218438 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

JVM 字节码指令对于栈帧数据操作举例

阅读更多

这一篇其实是对前面一篇《JVM字节码执行模型及字节码指令集》的一个延续和举例。结合例子看一下条件判定和无条件跳转指令对虚拟机栈的数据操作。

 

    我们先来看一段代码例子。这里addEspresso()添加浓度方法会判断参数,如果参数<=1那么久抛出异常。

package bytecode;  
  
/** 
 * 
 * Created by yunshen.ljy on 2015/6/21. 
 */  
public class CaramelMacchiato {  
  
    private int espresso ;  
  
    public void addEspresso(int espresso) {  
        if (espresso > 1) {  
            this.espresso = espresso;  
        } else {  
            throw new IllegalArgumentException();  
        }  
    }  
  
}  

 然后看一下addEspresso方法的字节码如下:

   0:        iload_1
   1:        iconst_1
   2:        if_icmple  13
   5:        aload_0
   6:        iload_1
   7:        putfield    #2; //Field espresso:I
   10:      goto 21
   13:      new #3; //class java/lang/IllegalArgumentException
   16:      dup
   17:      invokespecial   #4; //Method java/lang/IllegalArgumentException."<init>":()V
   20:      athrow
   21:      return

  这里我们来对字节码指令进行解析。

    第一行和第二行指令分别是把参数espresso以及常量1 从局部变量表压入操作数栈。

    第三行指令,也就是条件语句的比较指令,比较操作数栈顶,第一条第二条指令对应的值的大小,如果不满足比较条件,就会跳转到字节码的13 这个位置。也即是进入到异常处理。

    第四行指令到第六行指令就是我们前面一篇介绍过的,如同setBean 方法一样的。对于field的赋值操作。

    第七行 goto 指令,无条件跳转到字节码参数所指定的十二行return指令的位置,方法返回,清空方法栈。

    第八行开始是异常处理。这里先是new 指令创建一个Exception对象,并且将其压入操作数栈。

    第九行指令复制刚才的对象,并且压入操作数栈。

    第十行是将其中一个Exception对象出栈,并调用其构造器方法。

    第十一行将另外一个对象出栈,并且抛出异常,所以也是清空、结束了当前的方法栈。

3
1
分享到:
评论
3 楼 lijingyao8206 2015-07-20  
额,名字是怎么知道的?
shuiguaiQQ 写道
李静瑶你是杭州的吗?程序?

2 楼 lijingyao8206 2015-07-20  
嗯~在杭州
shuiguaiQQ 写道
李静瑶你是杭州的吗?程序?

1 楼 shuiguaiQQ 2015-07-20  
李静瑶你是杭州的吗?程序?

相关推荐

    JVM 字节码从入门到精通

    例如,字节码文件中会包含方法的字节码指令,这些指令是JVM执行程序的具体操作。 为了查看和分析字节码文件,JDK提供了一个名为javap的工具。javap能够反编译.class文件,打印出类的结构信息,包括类的方法、字段等...

    JVM中文指令手册.pdf

    JVM指令手册详细记录了JVM的所有操作码(opcode),也就是字节码指令。这些指令是给JVM解释器或者即时编译器(JIT)使用的低级指令集。在JVM上运行的Java程序会被编译成一系列指令,然后由JVM执行。 从给定文件的...

    jvm字节码自动加载

    了解JVM如何自动加载字节码对于深入理解Java应用程序的执行机制至关重要。 首先,我们要知道Java程序的类加载过程通常分为三个阶段:加载、验证、准备、解析和初始化。其中,加载阶段就是JVM查找并解析字节码文件的...

    JVM指令码表.zip

    Java虚拟机(JVM)是Java程序运行的核心,它通过解析和执行字节码来实现程序的运行。字节码是一系列二进制指令,这些指令在类文件中以16进制形式表示,每条指令占据一个或多个字节。`JVM指令码表.zip`包含的`JVM指令...

    第2章:字节码指令集与解析举例.mmap

    第2章:字节码指令集与解析举例.mmap

    深入理解JVM.rar

    每个使用Java的开发者都知道Java字节码是在JRE中运行,而JVM则是JRE中的核心组成部分,承担分析和执行Java字节码的工作,而Java程序员通常并不需要深入了解JVM运行情况就可以开发出大型应用和类库。尽管如此,如果你...

    jvm-callgraph,jvm字节码的调用图生成器.zip

    《深入解析JVM字节码调用图生成器——基于jvm-callgraph开源项目》 在Java虚拟机(JVM)的世界里,理解和优化代码执行性能是至关重要的。为了达到这一目的,开发者需要深入理解程序的运行时行为,其中就包括了类与...

    JVM优化3(Tomcat参数调优,JVM参数调优,jvm字节码,代码优化).pdf

    虽然这部分内容没有在提供的文档中详细展开,但通常包括通过一些工具分析字节码,找出性能瓶颈,进行指令重组、方法内联、死码删除等操作,以此来提升程序运行效率。 4. 代码优化 代码优化是提高Java应用性能的一...

    jvm字节码与类的加载.xmind

    自己总结的jvm中字节码与类的加载的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合jvm的爱好者和学习者

    JVM学习-字节码指令集(三)代码

    JVM学习-字节码指令集(三)代码

    jvm指令手册 +JVM必知必会,掌握虚拟机编译过程.rar

    JVM是Java Virtual ...i开头的指令操作数类型是integer类型,l开头的指令操作数类型是long类型,f开头的指令操作数类型是float类型,d开头的指令操作数类型是double,a开头的指令操作数类型是引用类型(reference)

    JVM指令操作解析及指南手册.pdf

    首先,简单数值类型的指令操作主要指的是将基础的数值类型如int、long、float和double等推送到操作数栈顶。这类操作包括iconst_m1、iconst_0至iconst_5、lconst_0至lconst_1、fconst_0至fconst_2、dconst_0至dconst_...

    JVM指令码.htm

    JVM指令码表,JVM运行原理学习的必备工具。常量入栈指令、局部变量值转载到栈中指令、将栈顶值保存到局部变量中指令、wide指令、通用(无类型)栈操作指令、类型转换指令、整数运算、浮点运算等指令。

    JVM优化3(Tomcat参数调优,JVM参数调优,jvm字节码,代码优化).zip

    - **字节码指令**:每个字节码代表一种操作,如`aload`加载引用,`invokevirtual`调用虚方法。 - **编译优化**:JIT(Just-In-Time)编译器将热点代码编译为原生机器码,提高运行效率。 - **逃逸分析**:确定对象...

    Java字节码指令列表

    Java字节码指令集定义了一系列指令,用于控制JVM的行为,包括数据加载、存储、算术运算、跳转等。 #### 指令解析 下面将详细介绍部分Java字节码指令及其功能: ##### A 类型指令 这些指令主要涉及对象引用的加载和...

    JVM指令码表.htm

    这是jvm指令码表,对于学习jvm底层原理的伙伴会有一定的帮助,对于jvm热爱和想研究的,肯定是必不可少的一份资源

    JVM指令查询手册.pdf

    JVM指令分为五类:操作数栈管理指令、局部变量表操作指令、控制流指令、字节码操作指令和对象及数组操作指令。这些指令共同构成了Java程序的运行基础。 2. **操作数栈管理指令** 操作数栈是JVM中存储数据的地方。...

    JVM指令手册.rar

    Java虚拟机(JVM)是Java程序运行的基础,它负责解释和执行Java字节码,为程序员提供了跨平台的运行环境。JVM指令手册是理解JVM内部工作原理的重要参考资料,其中包含了JVM执行的所有操作指令,这些指令是构建和优化...

    Swift-to-JVM字节码编译器JetANTLR.zip

    Jet 是 Swift-to-JVM 字节码编译器,为 Java 8 Runtime 而准备。Jet 使用 ANTLR 编写。 标签:JetANTLR

Global site tag (gtag.js) - Google Analytics