这一篇其实是对前面一篇《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对象出栈,并调用其构造器方法。
第十一行将另外一个对象出栈,并且抛出异常,所以也是清空、结束了当前的方法栈。
相关推荐
jvm字节码自动加载jvm字节码自动加载jvm字节码自动加载jvm字节码自动加载jvm字节码自动加载
这篇文章我们以输出 "Hello, World" 来开始字节码之旅,如果之前没有怎么接触过字节码的话,这篇⽂章应该能够让你对字节码有⼀个最基本的认识。
第2章:字节码指令集与解析举例.mmap
每个使用Java的开发者都知道Java字节码是在JRE中运行,而JVM则是JRE中的核心组成部分,承担分析和执行Java字节码的工作,而Java程序员通常并不需要深入了解JVM运行情况就可以开发出大型应用和类库。尽管如此,如果你...
自己总结的jvm中字节码与类的加载的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合jvm的爱好者和学习者
JVM是Java Virtual ...i开头的指令操作数类型是integer类型,l开头的指令操作数类型是long类型,f开头的指令操作数类型是float类型,d开头的指令操作数类型是double,a开头的指令操作数类型是引用类型(reference)
java的字节码指令码表,根据class文件中的指令查询相应的操作。本来想不要积分的,但是收集资料不容易,还是要一个积分吧。
JVM指令码表,JVM运行原理学习的必备工具。常量入栈指令、局部变量值转载到栈中指令、将栈顶值保存到局部变量中指令、wide指令、通用(无类型)栈操作指令、类型转换指令、整数运算、浮点运算等指令。
jvm字节码的调用图生成器
JVM优化3(Tomcat参数调优,JVM参数调优,jvm字节码,代码优化),供大家查阅!!!!!!!!!!!!!!
这是jvm指令码表,对于学习jvm底层原理的伙伴会有一定的帮助,对于jvm热爱和想研究的,肯定是必不可少的一份资源
Jet 是 Swift-to-JVM 字节码编译器,为 Java 8 Runtime 而准备。Jet 使用 ANTLR 编写。 标签:JetANTLR
JVM优化3(Tomcat参数调优,JVM参数调优,jvm字节码,代码优化).zip
这个是jvm指令手册,可以通过该手册查找理解字节码程序,超详细,超好用!!
JVM指令手册
Java字节码文件反编译后,在对应的文件中可以查看到对应的JVM指令,本资源提供JVM指令对应的操作说明,查找每一个JVM指令是做什么操作的
JVM指令操作解析及指南手册.pdf
JVM指令手册详细完整版.pdf