一、介绍
在Java中,JIT即时编译器是一项用来提升应用程序代码执行效率的技术。字节码指令被Java虚拟机解释执行,如果有一些指令执行频率高,称之为热点代码,这些字节码指令则被JIT即时编译器译成机器码同时进行一些优化,最后保存在内存中,将来执行时直接读取就可以运行在计算机硬件上。
在HotSpot中,有三款即时编译器,C1、C2和Graal,其中Graal在GraalVM章节中已经介绍过。C1编译效率比C2快,但是优化效果不如C2.所以C1适合优化一些执行时间较短的代码,C2适合优化服务端程序中长期执行的代码。
JDK7之后,采用了分层编译的方式,在JVM中C1和C2会一同发挥作用,分层编译将整个优化阶段级别分成了5个等级。
C1即时编译器和C2即时编译器都有独立的线程去进行处理,内部会保存一个队列,队列中存放需要编译的任务。一般即时编译器时针对方法级别来进行优化的,当然也有对循环进行优化设计。
参考
https://www.bilibili.com/video/BV1r94y1b7eS/?p=102&spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=cd03889ff27e1a185b3e97e3ed96d260