执行引擎
概述
虚拟机的执行引擎是由软件自行实现的,能够执行那些不被硬件直接支持的指令集格式。其主要任务是将字节码指令解释/编译为操作系统可以执行的机器指令。
代码编译和执行过程
机器码、指令、汇编语言
解释器
解释器真正意义上所承担的角色就是一个运行时“翻译者”,将字节码文件中的内容“翻译”为对应平台的本地机器指令。当一条字节码指令被解释执行完成后,接着再根据PC寄存器中记录的下一条需要被执行的字节码指令执行解释操作。
JIT编译器
又称为即时编译器,其将整个函数体编译为机器码,每次函数执行时,只执行编译后的机器码即可,这种方式可以使执行效率大幅度提升。
热点代码概述
1.一个被多次调用的方法或者是一个循环次数较多的循环体都可以被称为“热点代码”。热点代码会通过JIT编译器翻译成机器指令,由于这种编译发生在方法执行过程中,所有又称为“栈上替换”(因为方法的调用是发生在栈上的)。
2.一个方法要被调用多少次或者一个循环体要被执行多少次才会成为“热点代码”,是通过热点探测功能决定的。
3.目前HotSpot采用的热点探测方式是基于计数器的热点探测。HotSpot会为每一个方法建立2个不同类型的计数器,分别为方法调用计数器和回边计数器。
- 方法调用计数器:统计方法的调用次数。
- 回边计数器:统计循环体执行的循环次数。
4.计数器默认的阈值在Client模式下是1500次,在Server模式下是10000次,超过这个阈值就会触发JIT编译。可以通过**-XX:CompileThreshold**来设置。