jvm + LogCompilation输出

时间:2017-10-01 01:13:58

标签: java jvm jit inlining

所以在+ LogCompilation的输出中有打印的消息

callee is too large

too big

与特定方法相关联(以及编译器决定不内联)。

方法本身不是“被调用者”吗?还有什么意思呢? 如果是这样,“被调用者太大”和“太大”之间的区别是什么 - 他们不会意味着同样的事情(也许它只是一个遗留日志消息,2个工程师使用不同的语言做同样的事情?)

或者“被叫者”真的意味着“打电话”吗? 任何一个理由都不适合不内联。 我有点尴尬,我不明白这一点。

1 个答案:

答案 0 :(得分:5)

HotSpot JVM有两个JIT编译器:C1和C2。它们在Tiered mode(默认值)中一起工作。 inlining strategy并不是很简单,但最简单的因素是字节码中被调用方法的大小。

    当内联方法的字节码大小大于"callee is too large"(35)乘以MaxInlineSize(90%)时,
  • NestedInliningSizeRatio消息为printed by C1内联程度。
  • 当内联方法的大小分别大于"too big"(35)或"hot method too big"(325)时,
  • MaxInlineSizeFreqInlineSize条消息为printed by C2

因此,两个消息的含义大致相同,但是在不同的编译层上。