现在我在java中做了一些优化工作,并得到了一个有趣的(?)问题。
我的测试环境是jdk 1.8和Windows 10以及intellij 2018.1。 下面有一个测试代码。
int count = 1000000;
int listSize = 10;
{
// case 1
List<Integer> list = new ArrayList<>(listSize);
long start = System.nanoTime();
for (int i = 0; i < count; i++) {
for (int j = 0; j < listSize; j++) {
list.add(j);
}
}
long end = System.nanoTime();
long result = end - start;
System.out.println("Result: " + result);
}
{
// case 2
List<Integer> list = new ArrayList<>(listSize);
long start = System.nanoTime();
for (int i = 0; i < count; i++) {
list.add(0);
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6);
list.add(7);
list.add(8);
list.add(9);
}
long end = System.nanoTime();
long result = end - start;
System.out.println("Result: " + result);
}
结果是
结果:134686088 结果:183671342
我的问题是 为什么上述两个代码之间存在性能差异? 使用c ++上的visual studio,我记得编译器(visual studio)将两种情况优化为相同的机器语言。
有人可以帮助我吗?并告诉我使用java循环编程的最佳方法(最佳性能)。
THX。