使用Java长包装器与原始长包装器添加数字的性能比较
我正在运行这段代码,并得到了意想不到的结果。我预计添加原语的循环将执行得更快,但结果并不一致
import java.util.*;
public class Main {
public static void main(String[] args) {
StringBuilder output = new StringBuilder();
long start = System.currentTimeMillis();
long limit = 1000000000; //10^9
long value = 0;
for(long i = 0; i < limit; ++i){}
long i;
output.append("Base time\n");
output.append(System.currentTimeMillis() - start + "ms\n");
start = System.currentTimeMillis();
for(long j = 0; j < limit; ++j) {
value = value + j;
}
output.append("Using longs\n");
output.append(System.currentTimeMillis() - start + "ms\n");
start = System.currentTimeMillis();
value = 0;
for(long k = 0; k < limit; ++k) {
value = value + (new Long(k));
}
output.append("Using Longs\n");
output.append(System.currentTimeMillis() - start + "ms\n");
System.out.print(output);
}
}
输出:
基准时间 359毫秒 使用long 1842毫秒 使用long 614ms
我试过在它自己的java程序中运行每个单独的测试,但结果是一样的。是什么原因造成的
小细节:运行java 1.6
编辑: 我让另外两个人试用这个代码,其中一个人得到了和我一样的奇怪结果。另一个得到了真正有意义的结果!我让那个成绩正常的人给我们他的班级二进制文件。我们运行它,仍然会得到奇怪的结果。问题不在编译时(我认为)。我在运行1.6.0_31,得到正常结果的人在1.6.0_16,得到像我一样奇怪结果的人在1.7.0_04
编辑:使用线程获得相同的结果。在节目开始时睡觉(5000)。在整个程序中进行while循环也可以得到同样的结果(看看java完全启动后时间是否会收敛到正常时间)
共 (0) 个答案