Java:JIT方法内联

Java JIT 何时内联方法调用? 它是基于#times调用调用方法(如果是,该数字是什么?),或者其他一些标准(那将是什么?)

我已经读过JIT可以内联’final’方法,但它也会根据运行时统计信息内联非最终方法,所以想知道什么是触发条件。

我想答案会根据JVM的实现而有所不同,但也许所有这些都有共同之处?

简短的回答是它想要的。

通常情况下,JITC会自动内联小型最终或伪决赛方法,而无需先收集任何统计数据。 这是因为很容易看出内联实际上节省了代码字节与编码调用(或者至少它几乎是“清洗”)。

除非统计数据表明它是值得的,否则通常不会内联真正的非最终方法,因为如果出现意外的子类,必须以某种方式“保护”内联的非决赛。

至于在JITCed或内联之前可以调用某些内容的次数,这是高度可变的,并且即使在正在运行的JVM中也可能会有所不同。

运行服务器的JVM的默认内联阈值Hotspot编译器是35个字节码。

官方文档

通常,JIT默认情况下仅内联“小”方法。 除此之外,它完全依赖于实施。