Java会优化最大化操作吗?

Rou*_*per 0 java optimization

考虑下面的Java代码,将JRE优化调用替换到max一起打电话Math.max

未经优化的代码

public static void main(String[] args) {
  int max = max(3, 5);
}

public int max(int x, int y) {
  if (x < y) {
    return y;
  }
  else {
    return x;
  }
}
Run Code Online (Sandbox Code Playgroud)

优化的代码

public static void main(String[] args) {
  int max = Math.max(3,5)
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*m B 5

不.编译器如何知道它们是相同的?

是什么让你认为Math.max会更快?它没有理由比你的功能更快地执行.

编译器可能很好地内联一个简单的函数 - 但这取决于编译器.

想象一下,标准程序中有多少个库.编译器需要花费多少精力来扫描所有这些库以查找相同的代码片段.然后看看识别它们的收益有多微不足道.

现在还要考虑多个库的情况,两者都定义了这个方法.编译器需要保留两者,因为否则一个库变得依赖于另一个库,并且如果将来一个库改变或移除其方法的定义将会发生什么.

这是一个巨大的混乱蠕虫,最终没有真正的好处.