在这里插入图片描述
在这里插入图片描述

工作原理

当JIT编译启用时(默认是启用的),JVM读入.class文件解释后,将其发给JIT编译器。JIT编译器将字节码编译成本机机器代码。

通常javac将程序源代码编译,转换成java字节码,JVM通过解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释翻译。很显然,经过解释执行,其执行速度必然会比可执行的二进制字节码程序慢。为了提高执行速度,引入了JIT技术。

在运行时JIT会把翻译过的机器码保存起来,已备下次使用,因此从理论上来说,采用该JIT技术可以,可以接近以前纯编译技术。
————————————————
2.相关知识

JIT是just in time,即时编译技术。使用该技术,能够加速java程序的执行速度。

JIT并不总是奏效,不能期望JIT一定能够加速你代码执行的速度,更糟糕的是她有可能降低代码的执行速度。这取决于你的代码结构,当然很多情况下我们还是能够如愿以偿的。

从上面我们知道了之所以要关闭JITjava.lang.Compiler.disable(); 是因为加快执行的速度。由于JIT对每条字节码都进行编译,造成了编译过程负担过重。为了避免这种情况,当前的JIT只对经常执行的字节码进行编译,如循环等.
————————————————
JIT编译器
1.避免函数被直接解释执行,先将整个函数体编译成机器指令,再执行相应的机器指令,提高执行效率。

2.Java语言的编译过程时一段不确定的操作过程,可以是以下任意一种:

(1)前端编译器:把.java文件转化为.class(字节码文件)的过程

(2)后端编译器(jit编译):把字节码转为机器码的过程

(3)静态提前编译器(AOP):直接把*.java文件编译为本地机器码的过程

3.采用热点代码及探测方式

根据代码被调用执行的频率,在执行期间根据哪些经常被调用的热点代码做深度优化,将其直接编译为机器码,提高执行效率。

4.热点代码

(1)一个被多次调用的方法

(2)一个方法体内部循环多次的循环体

5.不同虚拟机采用的热点探测方式不同,其中hotspot vm 采用基于计数器的热点探测方式,为每个方法建立两个不同类型的计数器,即调用计数器和回边计数器,分别用于统计方法的调用次数和循环体的执行次数。

6.在Client模式下,阈值为1500,server下阈值为10000,超过便会触发jit编译,可通过虚拟机参数-xx:compileThreshold设置
————————————————
版权声明:本文为CSDN博主「weixin_44836361」的原创文章,
原文链接:
https://blog.csdn.net/weixin_44836361/article/details/119170109

http://www.360doc.com/content/19/0613/18/835902_842247843.shtml


怎么办,不写点感觉身上有蚂蚁在爬!