Java:JIT方法内联

时间:2012-04-09 12:15:25

标签: java inline jit

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

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

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

3 个答案:

答案 0 :(得分:18)

简短的回答是随时可以的。

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

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

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

答案 1 :(得分:8)

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

Official docs

答案 2 :(得分:2)

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