为什么每次Java测试都会更快?

时间:2015-03-01 11:13:20

标签: java testing

我对Java优化有一点疑问。 我有一个代码:

import java.util.LinkedList;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        int testCount = 1_000_000;

        test(testCount);
        test(testCount);
        test(testCount);
    }

    public static void test(int test) {
        List list = new LinkedList();
        long start = System.currentTimeMillis();
        for (int i = 0; i< test; i++) {
            list.add(0, i);
        }
        long finish = System.currentTimeMillis();
        System.out.println("time  " + (finish-start));
    }
}

此测试的每次下一次迭代都比之前的要少得多。

time  2443 
time  924
time  143

你能帮我理解为什么会这样吗?

3 个答案:

答案 0 :(得分:1)

问题实际上是Java有一个启动阶段。在很短的时间之后,代码实际上真的很快。这就是为什么第一次执行函数调用持续时间最长。当执行多个调用时,您将看到在前几次迭代后执行时间将更加稳定。

答案 1 :(得分:1)

您正在体验预热JVM并在各种性能优化中发挥作用的过程,包括内联。

答案 2 :(得分:0)

  

为什么每次Java测试都会更快?

你甚至不能说:用Java进行测试每次都会更快因为它不正确,只需再测试一次(即见this demo)所以你不能这样做询问不正确陈述的原因。

执行Java程序的时间取决于许多其他条件,即CPU,RAM,OS等的情况,当然time of execution specific code可能是is different each time但是{{ 1}}。