jvm热点代码检测机制 #jvm运行期优化#

2019-06-16  本文已影响0人  漫步无法人生

1. 基于采样的热点探测

采用这种方法的虚拟机会周期性地检查各个线程的栈顶,如果发现某个方法经常出现在栈顶,这个方法就是热点方法。

优点:这种方法实现起来较为简单,可以很容易的获取方法调用的关系
缺点:是由于有线程阻塞或别的因素影响,无法精确的对热点进行探测

2. 基于计数器的热点探测

采用这种方法的虚拟机会为每个方法(甚至是代码块)建立并维护计数器,统计方法的执行次数,执行次数超过一定的阀值就会认为它是热点方法
优点:这种方式更加精确和严谨
缺点:但统计时需要为每个方法建立并维护计数器,而且不能获取方法的调用关系,实现起来较为麻烦

计数器分两类:

3. 基于踪迹(Trace)的热点探测

采用这种方式的虚拟机是将一段频繁执行的代码作为一个编译单元,并仅对该代码片段进行编译,该代码片段由一个线性且连续的指令序列组成,仅有一个入口,但有多个出口。也就是说,基于踪迹而编译的热点代码不仅仅局限在一个单独的方法或者代码快中,一条Trace可能对应多个方法,代码中频繁执行的路径就可能被识别成不同的踪迹。
优点:因此这种方法有着更高的精度,并且能够避免编译不是频繁执行的代码,减少不必要的编译开销
缺点:但这种方法的实现就更为的复杂。

上一篇 下一篇

猜你喜欢

热点阅读