一个方法被调用多次,或者是一个方法内部多虚循环执行都可以被称作热点代码,因此都可以通过JIT编译器编译为本地机器指令。其过程发生在方法的执行过程中,因此被称为栈上替换,或简称OSR。其主要实现通过热点探测功能 。HostSpot采用的热点探测方法是基于计数器的热点探测。
计数器的热点探测:HotSpot会为每一个方法建立2个不同类型的计数器,分别为方法调用计数器和回边计数器。
方法调用计数器统计方法调用次数,默认在Client下是1500,Server下是10000,超过则会触发即时编译。(-XX:complieThreshold)。如果不做任何设置,方法调用计数器统计的并不是方法被调用的绝对次数,而是一个相对的执行频率,即一段时间内方法的调用次数。当超过一定时间调用次数不足让他提交给即使编译器编译,那么这个方法调用的计数器就减少一般(热点衰减:其发生在垃圾回收时顺便进行的)
回边计数器统计循环体执行循环次数