因此,在+ 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)时,MaxInlineSize
和FreqInlineSize
消息为printed by C2。 因此,这两种消息的含义大致相同,但是在不同的编译层上。