PS:默认hotspot虚拟机
1.java是混合执行的方式,即解释+编译(JIT,热点代码,hotspot的由来)。
2.也可以通过VM参数指定执行模式
1)-Xmixed 默认的混合模式模式,开始时候全部解释执行,启动速度较快,当检测到热点代码,则将其编译为本地代码(二进制 机器码,类似exe)提高执行效率。
2)-Xint,解释模式,启动快执行慢。
3)-Xcomp,编译模式,执行快,启动慢。
3.热点代码如何检测
1.多次被调用的方法,有个方法计数器,jvm有监测机制,方法执行频率大于一定次数
2.多次被调用的循环,有个代码执行的循环计数器,检测。
4.验证
@Slf4j
public class ExecutorWayMixed {
private static final int LOOP_TIMES = 20_0000;
public static void main(String[] args) {
final long startTime = System.currentTimeMillis();
for (int i = 0; i < 2; i++) {
for (int j = 0; j < LOOP_TIMES; j++) {
testLoop();
}
}
log.info("It is cost time {} ms", System.currentTimeMillis() - startTime);
}
/**
* 空循环,耗时
*
* @return void
*/
private static void testLoop() {
for (long i = 0; i < LOOP_TIMES; i++) {
i++;
}
}
}
a.混合模式(解释+编译,默认选择的模式):不指定,或者-Xmixed,19650ms
b.解释模式:-Xint,十分钟,还没执行完。
c.编译模式:-Xcomp,27161ms
上述栗子中,还是默认的混合模式效果最佳。
上一级->基础知识点篇
首页->目录大纲