简单:'if'的效率

use*_*036 2 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Kay*_*man 8

简短的回答:没关系.

答案很长:在那么低的水平上真的没关系.即使您实际比较执行的机器代码,其间也有很多东西(一个是JIT编译器,另一个是各种CPU缓存).

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

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

  • 这里什么都没有什么明显的.如果你不知道编译器优化和运行时优化是如何工作的(现在让我们忽略CPU缓存),我不建议你认为任何事情都是"显而易见的". (2认同)