欧尼酱讲JVM(19)——执行引擎

本文详细介绍了Java虚拟机(JVM)的执行引擎,包括其工作过程、解释器和JIT编译器的角色。解释器在程序启动时提供快速执行,而JIT编译器通过编译热点代码为本地机器指令提高性能。文章讨论了JIT的两种编译器C1和C2以及Graal编译器,强调了解释器与JIT编译器并存的原因,以平衡启动速度和执行效率。此外,还探讨了字节码的解释执行和编译执行的差异,以及它们在实际应用中的影响。
摘要由CSDN通过智能技术生成

 

目录

执行引擎概述

什么是执行引擎

位置图解

执行引擎的工作过程

Java程序的编译和解释运行的理解

Java代码编译和执行的过程

两个问题 

什么是执行器,什么是JIT编译器

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

解释器的使用

解释器的工作机制

解释器分类

JIT编译器

什么是JIT编译器

概念解释

热点代码及探测方式

如何选择

不同编译器比较

HotSpot设置模式——c1与c2编译器

Graal编译器和AOT编译器

HotSpotVM为何解释器与JIT编译器并存

Java代码的执行分类

问题来了

HostSpot JVM的执行方式

案例来了

 举例

写在最后


执行引擎概述

什么是执行引擎

执行引擎是Java虛拟机核心的组成部分之一。

“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。

JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被JVM所识别的字节码指令、符号表,以及其他辅助信息。

那么,如果想要让一一个Java程序运行起来,执行引擎(Execution Engine)的任务就是将字节码指令解释/编译为对应平台上的本地机器指令才可以。简单来说,JVM中的执行引擎充当了将高级语言翻译为机器语言的译者。

位置图解

执行引擎的工作过程

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

从外观上来看,所有Java虚拟机的执行引擎输入、输出都是一致的:输入的是字节码二进制流,处理过程是字节码解释执行的等效过程,输出的是执行结果。

Java程序的编译和解释运行的理解

Java代码编译和执行的过程

大部分的程序代码转换成物理机的目标代码或虚拟机能执行的指令集之前,都需要经过下图中的各个步骤:

橙色部分由javac编译器完成,或者称为前端编译器。

蓝色是编译原理。绿色是解释执行。

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

两个问题 

什么是执行器,什么是JIT编译器

解释器:当Java 虚拟机启动时会根据预定义的规范对字节码采用逐行解释的方式执行,将每条字节码文件中的内容“翻译”为对应平台的本地机器指令执行。

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

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

JDK1.0时代,将Java语 言定位为“解释执行”还是比较准确的。再后来,Java也发展出可以直接生成本地代码的编译器。

现在JVM在执行Java代码的时候,通常都会将解释执行与编译执行二者结合起来进行。

解释器的使用

字节码:

  • 字节码是一种中间状态(中间码)的二进制代码(文件),它比机器码更抽象,需要直译器转译后才能成为机器码
  • 字节码主要为了实现特定软件运行和软件环境、与硬件环境无关。
  • 字节码的实现方式是通过编译器和虚拟机器。编译器将源码编译成字节码,特定平台上的虛拟机器将字节码转译为可以直接执行的指令。
    • 字节码的典型应用为Java bytecode。

为什么要有字节码?直接高级语言翻译成机器指令不可以吗?

答:可以,但是需要花费大量的时间。

解释器:

JVM设计者们的初衷仅仅只是单纯地为了满足Java程序实现跨平台特性,因此避免采用静态编译的方式直接生成本地机器指令,从而诞生了实现解释器在运行时采用逐行解释字节码执行程序的想法。

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

解释器的工作机制

解释器分类

在Java的发展历史里,一共有两套解释执行器,即古老的字节码解释器、现

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值