那么,如果想要让一个Java程序运行起来,执行引擎(Execution Engine)的任务就是将字节码指令解释/编译为对应平台上的本地机器指令才可以。 简单来说,JVM中的执行引擎充当了将高级语言翻译为机器语言的译者。
执行引擎的工作流程:
-
执行引擎在执行的过程中究竟需要执行什么样的字节码指令完全依赖于程序计数器。
-
每当执行完一项指令操作后,程序计数器就会更新下一条需要被执行的指令地址。
-
当然方法在执行的过程中,执行引擎有可能会通过存储在局部变量表中的对象引用准确定位到存储在Java堆区中的对象实例信息,以及通过对象头中的元数据指针定位到目标对象的类型信息。
从外观上来看,所有的Java虚拟机的执行引擎输入,输出都是一致的:输入的是字节码二进制流,处理过程是字节码解析执行的等效过程,输出的是执行过程。
大部分的程序代码转换成物理机的目标代码或虚拟机能执行的指令集之前,都需要经过图中的各个步骤:
Java代码编译是由Java源码编译器来完成,流程图如下所示:
Java字节码的执行是由JVM执行引擎来完成,流程图如下所示:
-
在编译方式下,机器上运行的是与源程序等价的目标程序,源程序与编译程序都不参加目标程序的执行过程;而是将程序翻译成目标代码。
-
在解释方式下,解释程序与源程序要参加程序的运行过程中,运行程序的控制权在解释程序。在这个过程中不产生独立的目标代码。