找到热点代码,两计数器之和是否超过阀值?
来源:1-4 编译器优化机制详解
慕粉152226940
2020-09-10 08:45:26
老师课程中提到,Hotspot内置了两类计数器,方法调用计数器和回边计数器,但是在阐述他们各自执行的流程图中,却提到两计数器之和是否超过阀值(即上图箭头所指),那么此时我就比较困惑:
为什么是会用两个计数器之和去做比较呢?
另外如果上述二者之和,那么比较的那个阀值有是哪一个呢?也是两者域值之和吗?
1回答
您好,很棒的问题哦^_^非常有极客精神,为您点赞!
我参考了下《深入理解Java虚拟机》,发现图是OK的。
此外,在https://hotspot-compiler-dev.openjdk.java.narkive.com/zDMgaPxA/compilethreshold-backedgethreshold-question-s 这里,有一个相关的讨论 ,可以搜索:inv_count + bb_count,这就是两类计数器之和啦。可以看看。
此外,这个图只是一个大致的过程,实际上两个阈值是动态的,计算更为复杂,不同的JDK版本计算方式也不一样,比如这个:https://bugs.openjdk.java.net/browse/JDK-8059604 ,JDK 9就针对方法计数器控制阈值做了调整。
因此,我们在学习的时候,还是可以侧重思路的培养、了解大致的过程。祝您学习愉快!
相似问题