我正在玩一些代码,计算出一些
Java代码计算所需的时间,以获得一些Java功能的效率或低效率.这样做我现在卡住了一些非常奇怪的效果,我根本无法解释自己.也许有人可以帮助我了解它.
public class PerformanceCheck {
public static void main(String[] args) {
List removeList = new LinkedList();
int maxTimes = 1000000000;
for (int i=0;i<10;i++) {
long time = System.currentTimeMillis();
for (int times=0;times
// PERFORMANCE CHECK BLOCK START
if (removeList.size() > 0) {
testFunc(3);
}
// PERFORMANCE CHECK BLOCK END
}
long timeNow = System.currentTimeMillis();
System.out.println("time: " + (timeNow - time));
}
}
private static boolean testFunc(int test) {
return 5 > test;
}
}
开始这个结果是相对较长的计算时间(记住removeList是空的,所以testFunc甚至不调用):
time: 2328
time: 2223
...
而替换任何组合的removeList.size()> 0和testFunc(3)与其他任何东西都有更好的结果.例如:
...
if (removeList.size() == 0) {
testFunc(3);
}
...
结果(testFunc每一次调用):
time: 8
time: 7
time: 0
time: 0
即使调用这两个函数彼此独立,导致较低的计算时间:
...
if (removeList.size() == 0);
testFunc(3);
...
结果:
time: 6
time: 5
time: 0
time: 0
...
在我的初始例子中只有这种特殊的组合需要很长时间.这很刺激我,我真的很想了解它.有什么特别的?
谢谢.
加成:
在第一个例子中更改testFunc()
if (removeList.size() > 0) {
testFunc(times);
}
像别的东西
private static int testFunc2(int test) {
return 5*test;
}
会导致再次快.