在分析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());
此外,原则上测量单个流方法调用的执行时间是否合适?