什么是JIT
JIT也就是即时编译 在
运行时动态进行编译。将某些程序代码(通常是热点代码)从解释执行转换为本地机器码,以便直接在cpu上执行,无需再次解释执行。
注:高级语言->计算机cpu执行的机器语言有两种方式编译和解释,java中的编译成字节码 并不能直接在机器上运行,jvm中内置了解释器,在运行时对字节码解释翻译成 可直接运行的机器码
JIT编译器的工作流程
- 解释执行
解释java编译后的字节码 成为机器码 并执行
- 热点探测
在解释执行的过程中收集统计信息 如 调用频率、循环次数等
- 即时编译
一旦某段代码被确定为热点代码,JIT会对热点代码即时解释为 机器码,并换存为本地机器码
- 执行本地机器码
当再次调用的时候就会使用本地存在的机器码
优化点
- 方法内联的优化
将被调用的方法复制到调用的方法中,避免入栈和出栈的次数
- 锁消除
在成员方法中使用的 线程安全的stringbuffer和非安全的stringbuilder 性能都差不多
- 锁粗化
嵌套锁 粗化
- 热点代码,即时编译为机器码进行本地存储调用
- 逃逸分析
运行时判定对象是否会 逃逸出当前线程/方法,从而确定是
栈上分配还是堆上分配