执行引擎 - 解释器与JIT
- Execute Engine
- Interpreter
- Just-In-Time Compiler
- [Java HotSpot VM Options]
一:什么是解释器与JIT?
1> 解释器
解释器将字节码直接翻译为机器指令执行(Java);
在Python中不存在字节码,cPython会直接将python程序翻译为机器指令执行。
2> JIT
Just-In-Time 即时编译器,属于后端编译器(程序运行时动态编译),常与解释器配合使用,互惠互利。
二:HotSpot VM执行引擎策略
HotSpot虚拟机执行引擎采用解释器与JIT混合使用策略,程序响应速度快。
在执行过程中,执行引擎会进行热点探测
以找出热点代码
,并对热点代码进行即时编译得到机器指令并缓存当前热点代码(缓存的热点代码存储于Metaspace),当热点代码被再次调用时,机器指令会完成栈上替换
从而减少方法块的重复解释
提高程序执行效率。
J Rocket虚拟机(2008年被Oracle收购,2014年发布JDK1.8,Perm->Metaspace)执行引擎中没有解释器,程序响应/启动速度较慢,但是一旦程序运行起来效率将很高(J Rocket是世界上运行最快的虚拟机
)
三:热点探测
- 方法调用计数器(Invocation Counter)
- 统计方法被调用次数
- 计数器会有
半衰期
,可通过-XX:+/-UseCounterDecay选择开启或关闭
- 计数器会有
- 统计方法被调用次数
- 回边计数器 (Back Edge Counter)
- 统计方法内部循环体执行次数
- 统计方法内部循环体执行次数