jvm +LogCompilation输出中"callee is too large"的含义
Meaning of "callee is too large" in jvm +LogCompilation output
所以在 +LogCompilation 的输出中打印了消息
callee is too large
和
too big
与特定方法相关联(以及编译器决定不内联)。
但是 "callee" 不就是 方法 本身吗?这还有什么意思?
如果是这样,"callee too large" 和 "too big" 之间的区别是什么——它们的意思不一样吗(也许这只是一条遗留日志消息,2 位工程师对同一件事使用不同的语言?)
或者 "callee" 是否真的意味着 "caller"?
不内联的任何一个理由都是合理的。
有点不好意思,我不懂这个。
HotSpot JVM 有两个 JIT 编译器:C1 和 C2。它们一起工作 (the default). The 并不是很简单,但最简单的因素是字节码中被调用方方法的大小。
"callee is too large"
当内联方法的字节码大小大于 MaxInlineSize
(35) 乘以 NestedInliningSizeRatio
(90%) 时,消息为 printed by C1每个内联的下一级。
当内联方法的大小大于 MaxInlineSize
(35) 或 FreqInlineSize
(325) 时,"too big"
和 "hot method too big"
消息是 printed by C2 ) 分别。
因此,两条消息的意思大致相同,但在不同的编译层上。
所以在 +LogCompilation 的输出中打印了消息
callee is too large
和
too big
与特定方法相关联(以及编译器决定不内联)。
但是 "callee" 不就是 方法 本身吗?这还有什么意思? 如果是这样,"callee too large" 和 "too big" 之间的区别是什么——它们的意思不一样吗(也许这只是一条遗留日志消息,2 位工程师对同一件事使用不同的语言?)
或者 "callee" 是否真的意味着 "caller"?
不内联的任何一个理由都是合理的。
有点不好意思,我不懂这个。
HotSpot JVM 有两个 JIT 编译器:C1 和 C2。它们一起工作
"callee is too large"
当内联方法的字节码大小大于MaxInlineSize
(35) 乘以NestedInliningSizeRatio
(90%) 时,消息为 printed by C1每个内联的下一级。
当内联方法的大小大于 "too big"
和"hot method too big"
消息是 printed by C2 ) 分别。
MaxInlineSize
(35) 或 FreqInlineSize
(325) 时,因此,两条消息的意思大致相同,但在不同的编译层上。