花费时间来完成各个流媒体步骤?

时间:2019-10-01 08:57:53

标签: java time java-stream

是否有一个允许测量Java Stream步骤的库?

就像“当消耗此流时,在该过滤器中花费X的时间,在此映射中花费Y的时间,等等...”?

还是我需要修补一下?

2 个答案:

答案 0 :(得分:1)

根据定义,步骤之间没有“间隔”时间。您定义的方法链仅定义了要采取的步骤(这些方法建立了包含这些步骤的内部结构)。

致电终端操作员后,所有步骤将以不确定的顺序执行。如果您从不致电终端操作员,则也不会执行任何步骤。

我的不确定顺序是这样的:

intstream.peek(operation1).peek(operation2).sum();

您不知道是否先调用operation1,然后再调用operation2,然后再调用operation1,或者是否先后调用operation1,然后再调用{{ 1}}很多次,还是其他的。 (我希望我的说法是正确的。[编辑] correct)这可能取决于VM的实现,以牺牲时间的复杂性来权衡存储。

最好的方法是,在完全控制每个操作的同时,测量每个操作所花费的时间。流引擎花费的时间很难估算。但是,请知道,这样做时违反了流API的要求,即操作应无副作用。因此,请勿在生产代码中使用它。

答案 1 :(得分:0)

我唯一想到的工具是JMH,它是Java的通用基准测试工具。但是请注意,由于JIT,可能很难理解不同的Stream运算符对基准的影响。您的代码包含一个Stream并带有许多不同的运算符的事实,并不意味着JIT就是这样编译它的。