以下是针对与HotSpot虚拟机执行引擎的介绍
一、执行引擎概述概念:
执行引擎是Java虚拟机核心的组成部分,它是用于负责装载字节码到其内部,但是字节码并不能直接在操作系统上运行,那么执行引擎就是将字节码指令解释/编译为对应平台上的本地机器指令。简单来说,JVM执行引擎充当了将高级语言翻译为机器语言的翻译者。
二、执行引擎的工作过程
1、执行引擎在执行的过程中究竟需要执行什么样的字节码指令安全依赖于PC寄存器。
2、每当执行完一项指令操作后,PC寄存器就会更新下一条需要被执行的指令地址。
3、当然方法在执行的过程中,执行引擎有可能通过存储在局部变量表中的对象引用准确定位到存储在Java堆区中的对象实例信息,以及通过对象头中的元数据指针定位到目标对象的类型信息。
三、HotSpot执行引擎中包含解释器和JIT编译器
1、什么是解释器:
当Java虚拟机启动时会根据预定义对字节码采用逐行解释的方式执行,将每条字节码文件中的内容“解释”为对应平台的本地机器指令执行。
优缺点:响应速度快,但是总体效率较低。
2、JIT编译器(高效速度快):
就是虚拟机将源代码直接编译成本地机器平台相关的机器语言。寻找热点代码(就是高频执行的代码)将其放入元空间中,也就是元空间中存放的JIT缓存代码。
优缺点:响应速度稍慢,但是总体效率很高。有寻找热点代码的特性。
所以说Java语言是半编译半解释型语言:
注意:不要理解成是先编译后解释,是Java在执行Java代码时,HotSpot虚拟机默认是解释执行与编译执行二者结合起来进行的。
四、JIT编译器的触发
方法调用计数器:这个计数器就用于统计方法被调用的次数,它的默认阈值在Client模式下是1500次,在 Service 模式下是10000次。超过这个阈值就会触发JIT编译,把编译找到的热点代码存放在元空间中,这样执行效率就会大大提高。
当然阈值可以通过虚拟机参数**-XX:CompileThreshold**来手动设定。
另外:64位的机器默认就是使用的Service模式、JIT编译和解释器执行混合模式(这样的模式执行效率最高)。
另外:不管是汇编语言还是高级语言(比如:C/C++、Java、Python、GO…)在执行的时候都要先汇编到机器指定才可以被CPU执行。
尚硅谷深解Java虚拟机(JVM)内存结构各部分总结【三层划分】