
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java虚拟机的学习与应用是每一位后端编程开发程序员都应该熟练掌握的一个编程知识点,而本文我们就通过案例分析来简单了解一下,Java虚拟机字节码的用途。
加载和存储指令:用于将数据在栈帧中的局部变量表和操作数栈之间来回传输。比如iload、istore、bipush等;
运算指令:用于对两个操作数栈上的值进行某种特定运算,并把结果重新存入到操作数栈顶。比如加法指令:iadd,减法指令:isub等等;
类型转换指令:将两种不同的数值类型进行相互转换,这些转换操作一般用于实现用户代码中的显示类型转换操作,或者处理前面提到的指令集中数据类型相关指令无法与数据类型一一对应的问题(byte、short等扩展为int);
对象创建与访问指令:要注意Java虚拟机对类实例和数组的创建与操作使用了不同的字节码指令。创建类实例:new,创建数组:nwarray、anewarray等;
操作数栈管理指令:类似于操作普通数据结构中的栈,Java虚拟机提供了一些用于直接操作操作数栈的指令。比如pop、dup、swap等;
控制转移指令:可以让Java虚拟机有条件或无条件的修改程序计数器的值。包括条件分支(比如ifeq)、复合条件分支(比如tableswitch)、无条件分支(比如goto)等等;
方法调用和返回指令:方法调用指令包括,像invokevirtual指令:用于调用对象的实例方法,invokespecial指令:调用一些需要特殊处理的方法,包括实例初始化方法、私有方法和父类方法;方法调用指令与数据类型无关,但方法返回指令是根据返回值类型区分的,包括ireturn(返回boolean、byte、char、short、int),lreturn、freturn、dreturn和areturn,另外还有一条return指令供声明为void的方法、实例初始化方法以及类和接口类初始化方法使用;
异常处理指令:Java程序中显示抛出异常的操作(throw)都是用athrow指令来实现。除此之外,Java虚拟机规范还规定了许多运行时异常会在其他Java虚拟机指令检测到异常状况时自动抛出。比如在整数运算中,当除数为0时,虚拟机会在idiv或ldiv指令中抛出ArithmeticException异常。现在在Java虚拟机中处理异常是采用异常表完成的,以前则使用的是jsr和ret指令实现;
同步指令:synchronized语句块对应的指令就是monitorenter和monitorexit。编译器必须确保无论方法通过何种方式完成,方法中调用过的每条monitorenter指令都必须执行其对应的monitorexit指令。所以为了保证在方法异常完成时,monitorenter和monitorexit指令依然可以正确配对执行,编译器会自动产生一个异常处理器,这个异常处理器声明可以处理所有的异常;
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。