Java最初通过解释器进行解释执行,为了提高代码执行效率,在运行时,对热点代码会把这些代码变成本地平台相关的机器码。完成这个任务的编辑器称为即时编译器,简称JIT编译器。
用户可以使用参数-Xint强制虚拟机运行与“混合模式”,使用-Xcomp强制运行与编译模式。
热点代码有两类:1. 被多次调用的方法2. 被多次执行的循环体
检查热点代码有两种方式:
1.采用热点探测,查找经常出现的栈顶的方法
2.基于计数器的热点探测:为每个方法或者代码块建立计数器,统计技术方法。
HotSpot虚拟机采用第二种方式,为每个方法准备两类计数器:方法调用计数器和回边计数器。默认阀值Client模式1500次,Sever模式10000次,这个阀值设置-XX:ComplieThreshold。
计数器热度衰减:当超过一定时间限度,如果计数器没达到阀值,就会减少一半。
可以通过-XX:-UseCounterDecay来关闭热度衰减。通过-XX:CounterHalfLifeTime参数设置半衰周期时间。