- `-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修饰符
> 方法内联不仅可以消除调用本身带来的性能开销,还可以进一步触发更多的优化。因此,它可以算是编译优化里最为重要的一环。(极客时间)