【发布时间】:2015-09-23 21:54:58
【问题描述】:
我正在查看 JIT HotSpot 编译器日志 (-XX:+PrintCompilation -XX:+UnlockDiagnosticVMOptions -XX:+PrintInlining) 以确保正在优化/编译重要/热门方法。方法显示:
已经编译成大方法
这是什么意思?我的方法是否被 JIT 正确优化/内联?
来自 Oracle wiki 的解释并没有让我得出任何结论:
已经编译成大方法:已经有编译代码 对于从调用站点调用的方法和之前的代码 生成的大于 InlineSmallCode
这是什么意思?这是否意味着我的代码已经过优化/内联,或者 HotSpot 现在正在跳过它,因为它是在其他地方编译的?
【问题讨论】:
-
热点的诊断信息见wikis.oracle.com/display/HotSpotInternals/…。你看过这个文档吗?
-
@wero 我已经看到了,但不幸的是它并没有让我得出任何结论。那是什么意思?这是否意味着我的代码已优化/内联,或者 HotSpot 现在正在跳过它,因为它是在其他地方编译的?
-
代码是内联,当它很小并且可以替换而不是调用函数时......请查看有关Java Bytecode的资源分析喜欢这个播客:podcastchart.com/podcasts/webobjects-podcasts/episodes/…
-
@LatencyGuy:对我来说,您的方法没有被内联,因为它的编译大小超过了 InlineSmallCode 的阈值大小。你可以为你的方法验证这一点吗?
-
@wero 在其他地方被内联了。我在日志中看到
hot (inlined),但在其他地方也看到already compiled into a big method使用相同的方法。难道是我的方法的调用者之一太大,因此它不包括我的热方法?
标签: java optimization real-time jit jvm-hotspot