那么,如果想要让一个Java程序运行起来,执行引擎(Execution Engine)的任务就是将字节码指令解释/编译为对应平台上的本地机器指令才可以。 简单来说,JVM中的执行引擎充当了将高级语言翻译为机器语言的译者。
执行引擎的工作流程:
-
执行引擎在执行的过程中究竟需要执行什么样的字节码指令完全依赖于程序计数器。
-
每当执行完一项指令操作后,程序计数器就会更新下一条需要被执行的指令地址。
-
当然方法在执行的过程中,执行引擎有可能会通过存储在局部变量表中的对象引用准确定位到存储在Java堆区中的对象实例信息,以及通过对象头中的元数据指针定位到目标对象的类型信息。


从外观上来看,所有的Java虚拟机的执行引擎输入,输出都是一致的:输入的是字节码二进制流,处理过程是字节码解析执行的等效过程,输出的是执行过程。
大部分的程序代码转换成物理机的目标代码或虚拟机能执行的指令集之前,都需要经过图中的各个步骤:

Java代码编译是由Java源码编译器来完成,流程图如下所示:

Java字节码的执行是由JVM执行引擎来完成,流程图如下所示:
-
在编译方式下,机器上运行的是与源程序等价的目标程序,源程序与编译程序都不参加目标程序的执行过程;而是将程序翻译成目标代码。
-
在解释方式下,解释程序与源程序要参加程序的运行过程中,运行程序的控制权在解释程序。在这个过程中不产生独立的目标代码。

中间代码: 由于源程序与目标程序的逻辑结构往往差别很大,想要一次翻译到位很困难,而用语法制导翻译往往会生成繁琐低效的目标代码,因此必须采用

本文详细介绍了JVM的执行引擎如何将字节码转化为机器指令执行,强调了程序计数器在执行过程中的作用。解释器和JIT编译器在JVM中的角色被探讨,解释器提供快速启动,而JIT编译器提高执行效率。此外,还讨论了Java代码的编译执行过程,包括解释器、汇编器和编译器的职责。文章最后提到了Java面试中可能涉及的相关知识点。

4413

被折叠的 条评论
为什么被折叠?



