所以在 +LogCompilation 的输出中有打印的消息
callee is too large
和
too big
与特定方法相关联(以及编译器不内联的决定)。
但是“被调用者”不是方法本身吗?还有什么意思?如果是这样,“被调用者太大”和“太大”之间有什么区别-它们的意思不是一样吗(也许这只是一个遗留日志消息,2个工程师使用不同的语言来做同一件事?)
或者“被调用者”是否真的意味着“调用者”?
不内联的任何一个原因都是合法的。我有点不好意思,我不明白这一点。
HotSpot JVM 有两个 JIT 编译器:C1 和 C2。它们以分层模式(默认)协同工作。内联策略不是很简单,但最简单的因素是被调用方法在字节码中的大小。
"callee is too large"
当被内联的方法的字节码大小大于(35) 乘以(90%)时,C1 会在每个下一个内联级别打印消息。MaxInlineSize
NestedInliningSizeRatio
"too big"
当内联方法的大小分别大于(35) 或(325)时,C2"hot method too big"
会打印消息。MaxInlineSize
FreqInlineSize
因此,两条消息的含义大致相同,但在不同的编译层上。