在jvm + LogCompilation输出中"callee太大"的含义

iga*_*gaz 6 java jit jvm inlining

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

callee is too large
Run Code Online (Sandbox Code Playgroud)

too big
Run Code Online (Sandbox Code Playgroud)

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

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

或者"被叫者"真的意味着"打电话"吗?
任何一个理由都不适合不内联.我有点尴尬,我不明白这一点.

apa*_*gin 6

HotSpot JVM有两个JIT编译器:C1和C2.它们以分层模式(默认)一起工作.该内联的策略是不是很琐碎,但最简单的因素是字节码的被叫大小的方法.

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

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