JIT即时编译器和解释器
首先解释一下概念, 解释:输入程序代码–>得到结果。一步到位 编译:输入程序代码–>得到可执行代码–>执行可执行的代码得到结果。
解释器: 程序启动时首先发挥作用,解释执行Class字节码; 省去编译时间,加快启动速度; 但执行效率较低;
JIT编译器: 程序解释运行后,JIT编译器逐渐发挥作用; 编译成本地代码,提高执行效率; 但占用程序运行时间、内存等资源;
热点代码会被jit编译编译成本地代码,直接和操作系统cpu交互执行,不需要经过解释器去执行了。效率大大的提高。但是如果全部交给jit去编译执行的话java就不能跨平台了。
jvm的三种执行模式
1.解释器模式
一条一条地读取,解释并且执行字节码指令。因为它一条一条地解释和执行指令,所以它可以很快地解释字节码,但是执行起来会比较慢,没有JIT的配合下效率不高。
2.JIT编译器模式
即时编译器把整段字节码不加筛选的编译成机器码不论其执行频率是否有编译价值,在程序响应时间的限制下,没有达到最大的优化。
3.混合模式
在解释执行的模式下引入编译执行,刚好可以弥补相互的缺点,达到更优的效果。
程序刚开始启动的时候,因为解释器可以很快的解释字节码,所以首先发挥作用,解释执行Class字节码,在合适的时候,即时编译器把整段字节码编译成本地代码,然后,执行引擎就没有必要再去解释执行方法了,它可以直接通过本地代码去执行它。执行本地代码比一条一条进行解释执行的速度快很多,主要原因是本地代码是保存在缓存里的。
上一篇:
通过多线程提高代码的执行效率例子