Измерить время для выполнения отдельных шагов потоковой передачи? - PullRequest
0 голосов
/ 01 октября 2019

Существует ли библиотека, позволяющая измерять шаги Java Stream?

Как в "при использовании этого потока, X количество времени тратится в этом фильтре, Y количество времени тратится на этой карте и т. Д.".. "?

Или мне нужно немного повозиться?

Ответы [ 2 ]

1 голос
/ 01 октября 2019

По определению не существует «промежуточного» времени для шагов. Заданная вами цепочка методов определяет только шаги, которые нужно выполнить (методы создают внутреннюю структуру, содержащую эти шаги).

После вызова оператора терминала все шаги выполняются в неопределенном порядке. Если вы никогда не вызываете оператора терминала, никакие шаги также не выполняются.

Что я имею в виду под неопределенным порядком, это:

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

Вы не знаете, вызывается ли operation1,затем вызывается operation2, затем снова operation1, или если operation1 вызывается несколько раз, то operation2 несколько раз или еще что-то еще. (Надеюсь, я прав, говоря это. [Править] правильно ) Вероятно, реализация виртуальной машины требует компромисса со временем и сложностью.

Лучшее, что вы можетеЭто измерение времени, которое занимает каждая операция, поскольку вы имеете полный контроль над каждой операцией. Трудно измерить время, которое занимает двигатель потока. Однако знайте, что когда вы делаете это, вы нарушаете требование потокового API о том, что операции не должны иметь побочных эффектов. Так что не используйте его в производственном коде.

0 голосов
/ 01 октября 2019

Единственный инструмент, о котором я могу подумать, это JMH , который является общим инструментом для тестирования Java. Однако обратите внимание, что может быть трудно понять влияние, которое различные операторы Stream оказывают на эталонный тест из-за JIT. Тот факт, что ваш код содержит Stream с кучей различных операторов, не означает, что JIT компилирует его именно так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...