Just In Time即时编译器。当JVM发现某个方法或代码块运行频繁时,就会把这段代码认定为热点代码,通过JIT在运行时将这些代码编译成本地机器码,并进行相关优化。
在JIT未出现之前,字节码指令被解释器转译成对等的微处理器指令,并根据转译后的指令先后顺序依次执行,由于一个Java指令可能会被转译成十几或几十个对等的微处理器指令,这种模式执行的速度特别慢。
基于这种瓶颈,JIT技术应运而生了。对于需要使用JIT进行编译的字节码指令,相对于使用解释器来解释执行的方式来说,JIT只需要额外花费少许的编译时间,就可以提高代码执行的效率,节省执行时间。但是对于执行次数少的指令,也采用JIT进行编译则编译时额外花费的时间,加上执行的时间,不比解释执行的时间短。
基于解释器和即时编译器各自有其适应的优势特点,将两者集合起来,就是所谓的动态编译器dynamic compiler。动态编译器具体做法为,使用JIT执行热点字节码指令(被多次调用的方法或循环体的字节码指令),使用解释器执行非热点代码)。而至于热点字节码的判定,目前有两种算法,一种是基于采样的热点探测(周期性地检查各个线程的栈顶,经常出现在栈顶的方法代码就是热点代码),一种是基于计数器的热点探测(每个方法或其中的代码块对应有一个计数器,用来统计执行的次数,当执行次数超过一定阈值时则被认为是热点方法)。HotSpot虚拟机使用的是基于计数器的热点探测方法,它为每个方法准备了两个计数器,分别用于探测方法的调用次数和方法中循环体代码执行的次数,当计数器的值超过了阈值,则会触发JTI编译。触发了JIT编译后的代码,并不会停下来等待JIT编译完,而是继续解释执行,JIT编译的机器码等到下一次调用该方法或代码时才会被使用。
java解释和jit编译
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 《深入理解Java虚拟机》笔记_第一遍 先取看完这本书(JVM)后必须掌握的部分。 第一部分 走近 Java 从传...
- JVM、Java编译器和Java解释器 java解释器就是把在java虚拟机上运行的目标代码(字节码)解释成为具体...