JVM第5篇-执行引擎

一、执行引擎是做什么的?

  • 执行引擎是Java虚拟机核心的组成部分之一。
  • JVM的主要任务是负责装载字节码到其内部,单字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被JVM所识别的字节码指令、符号表,以及其他辅助信息。
  • 执行引擎的任务就是将字节码指令解释/编译为对应平台上的本地机器指令.简单来说,JVM中的执行引擎充当了将高级语言翻译为及其语言的译者。
    在这里插入图片描述

二、执行引擎是怎么工作的?

从外观上来看,所有的Java虚拟机的执行引擎输入、输出都是一致的;输入的是字节码二进制流,处理过程是字节码解析执行的等效过程,输出的是执行结果。
在这里插入图片描述

  • 执行引擎在执行的过程中究竟需要执行什么样的字节码指令完全依赖于PC寄存器。
  • 每当执行完一项指令操作后,PC寄存器就会更新下一条需要被执行的指令地址。
  • 当然方法在执行的过程中,执行引擎可能会通过存储在局部变量表中的对象引用准确定位到存储在Java堆区中的对象实例信息,以及通过对象头中的元数据指针定位到目标对象的类型信息。

三、代码编译和执行的过程

  • 过程一: javac.exe的执行
  • 过程二: java.exe的执行

3.1 解释器

3.1.1 工作机制

  • 解释器真正意义上所承担的角色就是一个运行时"翻译者",将字节码文件中的内容"翻译"为对应平台的本地机器码执行。从这个角度说,java是解释语言。
  • 当一条字节码指令被解释执行完成后,接着再根据PC寄存器中记录的下一条需要被执行的字节码指令执行解释操作。

分类

  • 字节码解释器
  • 模板解释器

3.2 为什么说Java是半编译半解释型语言?

现在JVM在执行Java代码的时候,通常都会解释执行与编译执行二者结合起来进行。
在这里插入图片描述

3.3 JIT编译器

JIT(Just In Time Compiler)编译器: 就是虚拟机将源代码直接编译成和本地机器平台相关的机器语言。

为什么还保留解释器执行方式?

  • 当程序启动时,解释器可以马上发挥作用,省去编译的时间,立即执行。编译器要想发挥作用,把代码编译成本地代码,需要一定的执行时间。但编译为本地代码后,执行效率高。
  • 如果不使用解释器,那么程序在启动时必然需要花费更长的时间来进行编译。当Java虚拟机启动时,解释器可以首先发挥作用,而不必等待即时编译器全部编译完成后再执行,这样可以省去许多不必要的编译时间。随着时间的推移,编译器发挥作用,把越来越多的代码编译成本地代码,获得更高的执行效率。

HotSpot JVM执行方式

在这里插入图片描述

Guess you like

Origin blog.csdn.net/qq_43478625/article/details/121456584