首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java会优化max操作吗?

Java会优化max操作吗?
EN

Stack Overflow用户
提问于 2013-12-11 22:02:11
回答 2查看 134关注 0票数 0

给定以下Java代码,JRE优化器是否将调用max替换为调用Math.max

未优化代码

代码语言:javascript
复制
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;
  }
}

优化代码

代码语言:javascript
复制
public static void main(String[] args) {
  int max = Math.max(3,5)
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-11 22:05:07

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

你凭什么认为Math.max会更快呢?它没有理由比您的功能执行得更快。

不过,编译器很可能会内联这样一个简单的函数--但这取决于编译器。

想象一下一个标准程序中有多少库。编译器需要付出多少努力才能扫描所有这些库,寻找相同的代码片段。然后看看识别它们的收益有多小。

现在还考虑多个库的情况,其中两个库都定义了这个方法。编译器需要离开这两个库,因为否则一个库就会依赖另一个库,如果将来一个库更改或删除了它对方法的定义,那么会发生什么情况。

这是一大罐乱七八糟的蠕虫,最终并没有真正的好处。

票数 5
EN

Stack Overflow用户

发布于 2013-12-12 00:05:17

Math.max比手写方法更快是有一个很好的理由的:它在内在方法的列表上。因为这是一个非常简单的操作,在给定的CPU上可能没有收益,但是使用它可能是一个好主意。

对于更复杂的操作,使用内在知识的速度将大大加快。例如,Long.numberOfLeadingZeros(long)的Java代码相当长,需要十几个周期(或者更多的是一些分支错误的预测)。由于Hotspot JVM知道这个方法,并且有一个相应的i86指令,您可以在一个周期内得到它(甚至为其他指令同时执行留出空间)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20530844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档