- JVM进行一段代码是不是热点代码,是不是需要触发即时编译,这样的行为称为热点探测,其实进行热点探测并不一定要知道方法被调用了多少次。主要的探测方法:
- 基于采样的热点探测:主要是虚拟机会周期性的检查各个线程的栈顶,若某个或某些方法经常出现在栈顶,那这个方法就是“热点方法”。优点是实现简单;缺点是很难精确一个方法的热度,容易受到线程阻塞或外界因素的影响。
- 基于计数器的热点探测:主要就是虚拟机给每一个方法甚至代码块建立了一个计数器,统计方法的执行次数,超过一定的阀值则标记为此方法为热点方法。
- Hotspot使用的基于计数器的热点探测方法。然后使用了两类计数器:方法调用计数器和回边计数器。当到达一定的阀值是就会触发JIT编译。
- 方法调用计数器 在JVM client模式下的阀值是1500次,Server是10 000次。可以通过虚拟机参数: -XX:CompileThreshold设置。但是JVM还存在热度衰减,时间段内调用方法的次数较少,计数器就减小。
- 回边计数器:主要统计的是方法中循环体代码执行的次数。
JVM之热点代码
最新推荐文章于 2024-04-02 00:58:08 发布