Прочитав о Java 8 java.util.stream.Intstream, я заменил некоторые из традиционных циклов потоками. К сожалению, я столкнулся с некоторыми проблемами производительности при работе с вложенными циклами.
Как и ожидалось, следующий код работает примерно на 47 мс на моей машине:
IntStream.range(0, 1000000000).forEach(i -> {});
Тем не менее, вложенность другой IntStream hyper увеличивает время выполнения примерно до 10 458 мс - i.e.:
IntStream.range(0, 1000000000).forEach(i -> {
IntStream.range(0, 1).forEach(j -> {});
});
Является ли это случаем неправильного использования с моей стороны или это проблема, которая может быть решена в будущем?
РЕДАКТИРОВАТЬ: Только для сравнения следующий код работал намного быстрее (в 1801 мс), используя традиционный внутренний цикл. Таким образом, даже принимая во внимание оптимизацию, кажется, что есть больше накладных расходов, используя внутренний IntStream?
final long[] random = {1};
IntStream.range(0, 1000000000).forEach(i -> {
for (int j = 0; j < 1; j++) {
random[0] += i;
}
});