9

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

callee is too large

too big

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

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

或者“被调用者”是否真的意味着“调用者”?
不内联的任何一个原因都是合法的。我有点不好意思,我不明白这一点。

4

1 回答 1

10

HotSpot JVM 有两个 JIT 编译器:C1 和 C2。它们以分层模式(默认)协同工作。内联策略不是很简单,但最简单的因素是被调用方法在字节码中的大小。

  • "callee is too large"当被内联的方法的字节码大小大于(35) 乘以(90%)时,C1 会在每个下一个内联级别打印消息。MaxInlineSizeNestedInliningSizeRatio
  • "too big"当内联方法的大小分别大于(35) 或(325)时,C2"hot method too big"会打印消息。MaxInlineSizeFreqInlineSize

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

于 2017-10-01T03:54:47.960 回答