令人困惑的结果性能测试Java 1.8 Collection Api

时间:2014-06-19 17:24:29

标签: java performance collections arraylist java-8

我正在玩java 1.8。 我读到新的集合api工作得更快,因为 它在并行化的数据结构上运行操作。

我想看看这个efford。 所以我写了以下代码:

 public static void main(String[] args) {

    ArrayList<SamplePerson> persons = new ArrayList<>();

    for (long i = 0; i < 10000000; i++) {
        persons.add(new SamplePerson(EyeColour.BLUE,20,"Max Musterman",Gender.MALE));
    }

    long nsBefore = System.nanoTime();


    // using the new collection api - parallel way??
    persons.forEach(samplePerson -> samplePerson.setAge(22));

    //  sequential way
    for(int i = 0; i < persons.size(); i++){
        persons.get(i).setAge(22);
    }

    long nsAfter = System.nanoTime();

    long runtime = nsAfter - nsBefore;

    System.out.println("Time in Nanoseconds: " + runtime);      
}

我的处理器:i7-2600 CPU

结果使用&#34; parallel&#34;办法: 以纳秒为单位的时间:74836825

使用顺序方式的结果: 以纳秒为单位的时间:45071315

每个人都能解释这个结果吗? 建立这种威胁的开销是否很高? 我有点困惑请帮帮我:-)

1 个答案:

答案 0 :(得分:6)

你需要考虑JIT热身,同时对某些东西进行基准测试,我会让它在第一次运行并且在第二次迭代中基准测试同样的事情

你也没有使用你需要的parallelStream

persons.parallelStream().forEach()