首页 > 解决方案 > 为什么以下测试对于第一种情况总是更快?

问题描述

我正在测试处理整数流(基元)的两种不同方法的性能。令我惊讶的是,无论顺序如何,第一个测试用例总是较慢。

public void intStreamTest() {
    final int[] ints = new int[1000];
    for (int x = 0; x < 1000; x++) {
        ints[x] = new Random().nextInt(1000);
    }
    // T1
    long start = System.currentTimeMillis();
    for (int x = 0; x <= 10000; x++) {
        List<Integer> result =
            IntStream.of(ints).boxed().collect(Collectors.toList());
    }
    System.out.println("T1 " + (System.currentTimeMillis() - start));
    // T2
    long start2 = System.currentTimeMillis();
    for (int x = 0; x <= 10000; x++) {
        List<Integer> result =
            IntStream.of(ints).mapToObj(Integer::valueOf).collect(Collectors.toList());
    }
    System.out.println("T2 " + (System.currentTimeMillis() - start2));
}

以下是输出示例:

T1 150
T2 95

当我更改测试用例的顺序(交换 T2 和 T1 部分)时,我得到:

T2 153
T1 92

我犯错了吗?第二个测试用例怎么可能总是更快(大约 60%)?

标签: java

解决方案


推荐阅读