简单:效率'如果'

时间:2014-04-04 13:11:56

标签: java performance if-statement

我没有老师,我可以提出有关效率的问题,所以我会在这里问一下。

如果我只想找到快速工作的代码,而不是注意ram的使用,只有cpu:

我假设检查'if'一次比写一次变量更快。但比例是多少?什么时候值得总是检查变量是否已经是我要设置的值?

例如:

//ex. 1
int a = 5;
while (true) {
    a = 5;
}

//ex. 2
int a = 5;
while (true) {
    if (a != 5) a = 5;
}

//ex. 3
int a = 6;
while (true) {
    if (a != 5) a = 5;
    a = 6;
}

我想是的。 2将比ex更快地工作。 1因为'a'始终保持在'5'。在这种情况下,“if”通过不每次都向'a'写入新值来加速该过程。但是,如果'a'经常变化,就像在ex。 3,然后检查是否(a!= 5)是不必要的并且减慢过程。因此,如果变量在大多数时间保持不变,那么这种检查是值得的;如果变量大部分时间都在变化,那就不值得了。但这个比例在哪里?也许写一个变量需要花费1000倍于检查它的时间?或者写作几乎与检查时间相同?我不是要求一个确切的答案,我总是想知道什么是我的代码最好的。

1 个答案:

答案 0 :(得分:8)

简短的回答:这没关系。

答案很长:在这么低的水平上,这并不重要。即使您实际比较执行的机器代码,它们之间也有很多东西(一个是JIT编译器,另一个是各种CPU缓存)。

你需要微观优化这样的事情的时候已经过去了。您需要确保的是您正在使用有效的算法。和往常一样,过早优化是万恶之源。

我注意到你写了#34;我总是想知道什么是我的代码的最佳方式"。最好的方法是编写清晰的代码,以便其他人可以理解您正在做的事情(如果他们看到您的示例中的代码,他们会认为您疯了)。另一个古老的格言是,为了让JVM以最佳方式优化您的代码,您应该编写"哑代码"。然后,JIT优化器可以更好地理解代码并将其转换为更有效的形式。