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虚拟机中的“方法内联”

相关文章:

  • 2021-11-03
  • 2021-08-27
  • 2021-10-22
  • 2021-12-27
  • 2021-11-02
  • 2021-04-09
  • 2021-08-10
  • 2021-11-02
猜你喜欢
  • 2021-07-27
  • 2021-04-29
  • 2021-07-16
  • 2021-04-03
  • 2021-07-19
  • 2021-08-26
  • 2021-07-12
相关资源
相似解决方案