因此,在+ LogCompilation的输出中将打印出消息

callee is too large


too big

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

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

还是“被叫者”真的意味着“调用者”?
无论哪种原因,不进行内联都是合理的。
我不明白这一点,我感到有些尴尬。

最佳答案

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

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

    10-06 11:26