是否有一个允许测量Java Stream步骤的库?
就像“当消耗此流时,在该过滤器中花费X的时间,在此映射中花费Y的时间,等等...”?
还是我需要修补一下?
答案 0 :(得分:1)
根据定义,步骤之间没有“间隔”时间。您定义的方法链仅定义了要采取的步骤(这些方法建立了包含这些步骤的内部结构)。
致电终端操作员后,所有步骤将以不确定的顺序执行。如果您从不致电终端操作员,则也不会执行任何步骤。
我的不确定顺序是这样的:
intstream.peek(operation1).peek(operation2).sum();
您不知道是否先调用operation1
,然后再调用operation2
,然后再调用operation1
,或者是否先后调用operation1
,然后再调用{{ 1}}很多次,还是其他的。 (我希望我的说法是正确的。[编辑] correct)这可能取决于VM的实现,以牺牲时间的复杂性来权衡存储。
最好的方法是,在完全控制每个操作的同时,测量每个操作所花费的时间。流引擎花费的时间很难估算。但是,请知道,这样做时违反了流API的要求,即操作应无副作用。因此,请勿在生产代码中使用它。
答案 1 :(得分:0)
我唯一想到的工具是JMH,它是Java的通用基准测试工具。但是请注意,由于JIT,可能很难理解不同的Stream
运算符对基准的影响。您的代码包含一个Stream
并带有许多不同的运算符的事实,并不意味着JIT就是这样编译它的。