在正式讲解执行的方式前,我们先对字节码有一个简单的了解。平时在使用java时所看到的是java文件,不过jvm编译的有所不同,我们把它称为字节码文件。从这里就可以看出,字节码和jvm密不可分。在字节码的执行中,分为即时编译和解释执行的方式,下面我们就这两种情况展开介绍。
1、说明
(1)即时编译方式:解释器先将字节码编译成机器码,然后再执行该机器码。
(2)解释执行方式:解释器通过每次解释并执行一小段代码来完成Java字节码程序的所有操作。
常用的是第二种方法。因为JVM规范描述有足够的灵活性,所以它可以更高效地将字节码转换成机器码。对那些对运行速度有更高要求的应用程序,可以使用解释器将Java字节码立即编译成机器码,从而很好地保证了Java代码的可移植性和高性能。
2、实例
public static void main(java.lang.String[]); descriptor: ([Ljava/lang/String;)V flags: ACC_PUBLIC, ACC_STATIC Code: stack=2, locals=4, args_size=1 0: iconst_1 1: istore_1 2: iconst_2 3: istore_2 4: iconst_1 5: iconst_2 6: invokestatic #2 // Method calc:(II)I 9: istore_3 10: return static int calc(int, int); descriptor: (II)I flags: ACC_STATIC Code: stack=6, locals=2, args_size=2 0: iload_0 1: i2d 2: ldc2_w #3 // double 2.0d 5: invokestatic #5 // Method java/lang/Math.pow:(DD)D 8: iload_1 9: i2d 10: ldc2_w #3 // double 2.0d 13: invokestatic #5 // Method java/lang/Math.pow:(DD)D 16: dadd 17: invokestatic #6 // Method java/lang/Math.sqrt:(D)D 20: d2i 21: ireturn
以上就是Java字节码执行的两种方式,相信大家现在已经对字节码的基础内容,有一定的了解,学会后可以对字节码展开相关的练习。