当一个方法的调用次数达到这个门限值时,JIT编译器会对该方法的字节码进行优化,转换为机器代码,这样该方法在后续调用中就可以直接执行机器码,获得更高的性能。
这个门限值的设置会影响JIT优化触发的时间点,进而影响程序的整体性能。如果设置得太高,优化延迟太长,无法发挥效果。如果设置得太低,会提前触发JIT,增加编译消耗,也无法获得最佳性能。
所以,JIT的默认门限需要综合考虑:
- 方法体大小:较小的方法调用频率高,可以设置较低门限;较大方法设置高门限,以减少编译消耗
- 方法的循环性:循环方法的机器码可以重复利用,设置较低门限更为适宜
- 方法调用的分布:如果方法调用分布集中,设置较低门限,集中触发JIT优化
- CPU性能:CPU性能越高,编译消耗越低,可以适当降低门限
综上,JIT门限的设置 depends on 具体方法及运行环境,需要平衡触发JIT的“快”与“慢”。如果门限设置得当,可以较早但不过度触发JIT,并获得较高的性能提升。
类似的,JIT还有其他门限设置,如热代码段方法调用上限等,原理相同。通过这些门限,JIT可以自动适应不同的方法和运行环境,进行运时优化。
所以,总结来说,JIT的默认门限指的就是触发JIT优化的方法调用次数阈值。设置这个门限的原则是在程序运行初期,尽量少触发JIT,减少编译消耗;在稳定阶段,适度降低门限,使更多方法达到优化条件,获得整体性能提高。