测量Java8流中方法调用的执行时间

时间:2018-04-11 00:27:38

标签: java java-8 java-stream profiler

在分析java代码的执行时间时,常用的方法是使用以下方法:

long start = System.nanoTime();
expensiveMeothd(array);
long runtime = System.nanoTime() - start;

不幸的是,这种方法不适用于Java8流语法的范围。

测量流方法执行时间的最佳做法是什么? 例如,如果我想计算多长时间:  .map(x -> someexpensiveMeothod(x))需要执行。

我考虑过的一种方法是将流返回包装在存储纳米时的对象中。然而,这种方法似乎不太理想。这是我的概念:

public class Profiler {
    public List list;
    public long startTime;
    public long endTime;

    public Profiler(List list, long s, long e) {
        this.list = list;
        this.startTime = s;
        this.endTime = e;
    }
}

List<Profiler> results = myList.stream()
               .map(x -> new Profiler(x, System.nanoTime(), null))
               .map(x -> {
                    expensiveMethod(x.list);
                    x.endTime = System.nanoTime(); 
                    return x;  
               })
               .collect(Collectors.toList());

此外,原则上测量单个流方法调用的执行时间是否合适?

0 个答案:

没有答案