执行引擎的任务是将字节码指令解释/编译为对应平台上的本地机器指令。
执行引擎执行完一项指令操作后,PC寄存器会更新下一条需要被执行的指令地址
方法执行过程中,执行引擎可能会通过存储在局部变量表中的对象引用定位到堆中的对象实例信息,以及通过对象头的元数据指针定位到目标对象的类型信息
解释器(Interpreter):JVM启动时会根据预定义的规范对字节码采用逐行解释的方式执行
JIT编译器(Just In Time Compiler):虚拟机将源代码直接编译成机器指令
当程序启动后,解释器可以马上发挥作用,省去编译的时间,立即执行
编译器要想发挥作用,把字节码编译成机器码,需要一定的时间。但编译为机器码后,执行效率高
解释器+即时编译器:当JVM启动时,解释器可以首先发挥作用,而不必等待即时编译器全部编译完成后再执行。随着时间的推移,编译器发挥作用,根据热点探测功能,将有价值的字节码编译为本地机器指令,以换取更高的程序执行效率
模板解释器:将每一条字节码和一个模板函数相关联,模板函数中直接产生这条字节码执行时的机器码,从而很大程度上提高了解释器的性能
Hotspot中,解释器主要由Interpreter模块和Code模块构成
Interpreter模块:实现了解释器的核心功能
Code模块:管理Hotspot在运行时生成的本地机器指令
即时编译的目的是避免函数被解释执行,而是将整个函数体编译成为机器码,每次函数执行时,只执行编译后的机器码即可,这种方式可以使执行效率大幅度提升
JIT编译发生在方法的执行过程中,因此也被称之为栈上替换,或简称为OSR(On Stack Replacement)
JIT编译器通过热点探测功能判断是否将代码编译为本地机器指令执行
Hotspot采用的热点探测方式是基于计数器的热点探测。为每一个方法都建立2个不同类型的计数器:方法调用计数器(Invocation Counter)和回边计数器(Back Edge Counter)
方法调用计数器用于统计方法的调用次数
回边计数器用于统计方法中循环体执行的次数
如果方法调用计数器与回边计数器之和超过方法调用计数器的阈值,将会向即时编译器提交一个该方法的代码编译请求
如果不做任何设置,方法调用计数器统计的并不是方法被调用的绝对次数,而是一个相对的执行频率,即一段时间之内方法被调用的次数。当超过一定的时间限度,如果方法的调用次数仍不足以让它提交给即时编译器编译,那这个方法的调用计数器就会被减少一半,这个过程称为方法调用计数器热度的衰减(Counter Decay),而这段时间就称为此方法统计的半衰周期(Counter Half Life Time)
进行热度衰减的动作是虚拟机进行垃圾收集时顺便进行的,可以使用虚拟机参数 -XX:-UseCounterDecay 来关闭热度衰减,让方法计数器统计方法调用的绝对次数,这样,只要系统运行时间足够长,绝大部分方法都会被编译成本地代码
-Xint 完全采用解释器模式执行程序
-Xcomp 完全采用即时编译器模式执行程序,如果即时编译出现问题,解释器会介入执行
-Xmixed 采用解释器+即时编译器的混合模式共同执行程序
Hotspot中内嵌有两个JIT编译器,分别为Client Compiler和Server Compiler。大多数情况下我们简称为C1编译器和C2编译器
-client 指定JVM运行在Client模式下,使用C1编译器。C1编译器会对字节码进行简单和可靠的优化,耗时短,以达到更快的编译速度
-server 指定JVM运行在Server模式下,使用C2编译器。C2进行耗时较长的优化,以及激进优化。但优化的代码执行效率更高
C1优化策略:方法内联、去虚拟化、冗余消除
方法内联:将引用的函数代码编译到引用点处,这样可以减少栈帧的生成,减少参数传递以及跳转的过程
去虚拟化:对唯一 的实现类进行内联
冗余消除:在运行期间把一些不会执行的代码折叠掉
C2优化策略:基于逃逸分析
标量替换:用标量值替换聚合对象的属性值
栈上分配:对于未逃逸的对象分配在栈上
同步消除:清除同步操作,通常指synchronized
分层编译(Tiered Compilation)策略:程序解释执行(不开启性能监控)可以触发C1编译。也可以加上性能监控,C2编译器会根据性能监控信息进行激进优化(Hotspot默认使用)
AOT编译(静态提前编译器,Ahead Of Time Compiler):即时编译器是在程序运行过程中,将字节码文件转换为可在硬件上直接运行的机器码。AOT编译指的是在程序运行之前,将字节码转化为机器码的过程
缺点:
破坏了Java”一次编译,到处运行“,必须为每个不同硬件、OS编译对应的发行包
降低了Java链接过程的动态性,加载的代码在编译期就必须全部已知
原文:https://www.cnblogs.com/tang321/p/14703097.html