java for loop vs manual code

时间:2018-06-14 00:45:45

标签: java performance for-loop java-8

现在我在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);
    }

结果是

结果:1​​34686088 结果:183671342

我的问题是 为什么上述两个代码之间存在性能差异? 使用c ++上的visual studio,我记得编译器(visual studio)将两种情况优化为相同的机器语言。

有人可以帮助我吗?并告诉我使用java循环编程的最佳方法(最佳性能)。

THX。

0 个答案:

没有答案