【发布时间】:2015-09-10 13:46:21
【问题描述】:
java 有一个参数-XX:MaxInlineLevel(默认值为 9),它控制对内联的嵌套调用的最大数量。为什么会有这样的限制?为什么通常的基于频率和代码大小的启发式方法不足以让 JVM 自行决定内联的深度?
(这是由 JitWatch 提示的,它向我展示了深层嵌套的 Guava checkArgument 调用由于深度而没有被内联)
【问题讨论】:
-
完全不确定,但可能是为了避免相互递归陷阱,这些陷阱可能难以/昂贵地以其他方式防御。
-
@OldCurmudgeon 但是你有 MaxRecursiveInlineLevel
-
@MrSimpleMind - 有趣 - 因此我显然错了。一定是其他原因。