考虑下面的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)
不.编译器如何知道它们是相同的?
是什么让你认为Math.max会更快?它没有理由比你的功能更快地执行.
编译器可能很好地内联一个简单的函数 - 但这取决于编译器.
想象一下,标准程序中有多少个库.编译器需要花费多少精力来扫描所有这些库以查找相同的代码片段.然后看看识别它们的收益有多微不足道.
现在还要考虑多个库的情况,两者都定义了这个方法.编译器需要保留两者,因为否则一个库变得依赖于另一个库,并且如果将来一个库改变或移除其方法的定义将会发生什么.
这是一个巨大的混乱蠕虫,最终没有真正的好处.