JVM - 执行引擎

在这里插入图片描述
执行引擎就相当于JVM的大脑。

概述

  1. 执行引擎是Java虚拟机核心的组成部分。

  2. 因为在计算机中,通过编译后的字节码是不等于机器语的。意思就是编译后的字节码文件对于计算机来说,它是仍然不能执行的。

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

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

举个例子:
根据世界格局的发展,领导人总结出世界格局变化,然后给与将军,这一步就相当于虚拟机编译我们写的代码(.java—>.class)。
将军将这些根据情况来给战士们发布一条一条的命令去执行,这一步就是执行引擎编译字节码文件。将具体要怎么操作给与计算机。(.class—>机器码)

区分上面例子中的两个编译

  1. 前端编译:从Java程序员-字节码文件的这个过程叫做前端编译。
  2. 在执行引擎这里有两个意思:一种是解释编译,一种是编译执行(这里就是后端的编译)。

工作方式:
● 依赖于PC寄存器,当PC寄存器指向哪条指令时,执行引擎就去操作该指令对应的操作。

● 当在执行的过程中,遇到局部变量表中的对象引用时,会根据引用访问堆中对象的实例以及根据对象头来访问对应位置的数据。

什么是解释器?什么是JIT编译器?

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

● 功能:配合PC计数器将字节码文件逐行解释成机器指令后执行。

● 优点:不需要等待,拿到字节码文件即可立即进行解释。

● 缺点:若遇到热点代码时效率低下。

JIT(Just In Time Compiler)编译器: 就是虚拟机将源码一次性直接编译成和本地机器平台相关的机器语言,但并不是马上执行。

● 功能:将一段代码编译成本地代码,当再次执行到这段代码时,可以从代码缓存中取出,无需再对其逐条解析。

● 优点:到热点代码执行效率高。

● 缺点:需要一段时间讲这段代码执行翻译存入缓存。

一个被多次调用的方法,或者一个方法体内部循环次数较多的循环体都可以称为“热点代码”

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

在最开始是将Java语言定位为“解释执行”还是比较准确的。再后来,Java也发展出可以直接生成本地代码的编译器。现在JVM在执行Java代码的时候,通常都会将解释执行与编译执行两者结合起来进行。

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

● 解释器真正意义上所承受的角色就是一个运行时的“翻译者”,将字节码文件中的内容“翻译”为对应平台的本地机器指令执行,执行效率低。

● JIT编译器是将字节码翻译成本地代码后,就可以做一个缓存操作,存储在方法区的JIT代码缓存中(执行效率就更高了)。

是否需要启动JIT编译器将字节码直接编译为对应平台的本地机器指令,则需要根据代码被调用执行的效率而定。

JIT编译器在运行时就会针对那些频繁被调用的“热点代码”来做出深度优化,将其直接编译为对应平台上的本地机器指令,以此来提升Java程序的执行性能。

在目前HotSpot虚拟机所采用的热点探测方式是基于计数器的热点探测。

JIT编译器执行效率高,为什么还需要解释器
尤其是在web项目。若只采用JIT编译器的话会将字节码执行翻译进缓存,而这段时间只能会让用户等待。所以两个相结合时,当JVM启动的时候,解释器可以先发挥作用,而不用等待JIT编译器全部翻译好了再去执行,可以提高程序总的执行效率,当随着时间的推移,JIT会把越来越多的字节码编译成本地代码,效率会逐渐提高。就需要采用解释器与即时编译器并存的架构来换取一个平衡点。

另一方面是:因为JIT编译器在勘测到热点代码这段才会对其执行翻译缓存,若不是热点代码还是使用解释器进行解释的。

总篇:-----> JVM概述
一、JVM - 的类加载器(类加载子系统)
二、JVM - 运行时数据区
三、JVM - 本地方法接口

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值