Java——JVM虚拟机中的“方法内联”

  1. 什么是方法内联
    a. 编译过程遇到方法调用,把目标方法体纳入编译范围且取代原方法优化手段
    b. 是编译优化最重要的
  2. 举例:getter/setter
    a. 如果没有方法内联,调用时需要创建并压入用于getter/setter的栈帧,访问字段,弹出栈帧,最后再到当前方法执行
    b. 内联后,就仅剩字段访问
  3. 内联的条件
    a. 内联越多执行效率越高,但是编译时间会延长
    b. 内联越多,机器码越长容易使java内存溢出

下面举一个例子:
有这样一段代码Java——JVM虚拟机中的“方法内联”
他的原始IR图为这样:
Java——JVM虚拟机中的“方法内联”
优化bar方法IR图为:
Java——JVM虚拟机中的“方法内联”
最后将bar方法IR图加入invoke5号节点中:
Java——JVM虚拟机中的“方法内联”


这就是JVM中简单的方法内联,当然方法内联还有很多限制,执行规则如下表所示:
Java——JVM虚拟机中的“方法内联”