企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
- `-Xint`表示强制解释执行 - 内联调用是工程师能直接参与JIT优化的环节。 ---- ![](https://img.kancloud.cn/30/83/3083024352e7cfc5713f7a65992e5ab8_498x174.png) 默认会优化成机器码 ---- ![](https://img.kancloud.cn/d9/d3/d9d38b43754dde66105a5f04781ba2d6_742x212.png) 解释执行,即不优化 ---- ![](https://img.kancloud.cn/d0/9c/d09cebcdfc1be2efdc651a3583a15269_746x218.png) 默认会优化成机器码,但不进行内联优化 ---- ![](https://img.kancloud.cn/24/44/2444d5224be54d68e26dea7f6f5539a0_1260x174.png) ---- ```shell java -XX:+UnlockDiagnosticVMOptions -XX:+PrintInlining -XX:+PrintCompilation com/ttyc/sbz/jmh/jit/HotCodeTest | grep -E 'getMsg|echo' ``` ![](https://img.kancloud.cn/01/98/01986664f6883c9588a69c12ebd6c5ce_784x274.png) 内联通常有如下信息显示,指示内联是否成功 - inline(hot):表示方法被标记为内联 - callee is to large:C1打印,指示方法超过MaxInlineSize而不能内联 - hot method too big:C2打印,指示方法大小超过FreqInlineSize - already compiled into a big method:内联一个已经编译的方法,大小超过了InlineSmallCode值 **因此我们可以观察方法是否被内联,以及没有被内联的原因。** 编程建议: - 更小的方法体,JVM总是偏好更小的方法 - 尽量使用final、private、static修饰符 > 方法内联不仅可以消除调用本身带来的性能开销,还可以进一步触发更多的优化。因此,它可以算是编译优化里最为重要的一环。(极客时间)