Профилирование времени выполнения Stream против ParallelStream в java 8
#JDK8 [20_000_000 integers] #Corei7 4790 #Windows10
#JDK10 [20_000_000 integers] #Corei7 4790 #Windows10
Помните, используя параллельные стримы мы можем забрать все ресурсы у процессора и нашему веб контейнеру ничего не останется что приведет к торможению работы сервиса
Исходник
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public static void checkParallelStreamVSStream(List<Integer> integers) { long start = System.nanoTime(); List<Integer> list = integers.stream().sorted().collect(Collectors.toList()); System.out.println("Stream: " + ((double)(System.nanoTime() - start) / 1_000_000.0) + " milisec"); long start2 = System.nanoTime(); List<Integer> list2 = integers.parallelStream().sorted().collect(Collectors.toList()); System.out.println("ParallelStream: " + ((double)(System.nanoTime() - start2) / 1_000_000.0) + " milisec"); } public static List<Integer> populateListIntegers() { // long start = System.nanoTime(); int counter = 10_000_000; ArrayList<Integer> integers = new ArrayList<>(); for (int i = 0; i < counter; i++) { integers.add(i); integers.add(counter - i); } // System.out.println(System.nanoTime() - start) / 1000000); return integers; } |
Тест
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
package ru.leodev.java8; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.RepeatedTest; import java.util.List; public class StreamParallelismLessonTest { private List<Integer> integers; @BeforeEach void setUp() { integers = StreamParallelismLesson.populateListIntegers(); } @RepeatedTest(10) void checkParallelStreamVSStream() { StreamParallelismLesson.checkParallelStreamVSStream(integers); } } |
Результат
#JDK8 [20_000_000 integers] #Corei7 4790 #Windows10
java8.StreamParallelismLessonTest
Stream: 5233.113302 milisec
ParallelStream: 3796.44236 milisec
Stream: 813.629325 milisec
ParallelStream: 3277.696421 milisec
Stream: 9266.434093 milisec
ParallelStream: 1986.27979 milisec
Stream: 6898.908844 milisec
ParallelStream: 2105.545209 milisec
Stream: 9102.624215 milisec
ParallelStream: 1923.134938 milisec
Stream: 6872.610933 milisec
ParallelStream: 2132.141496 milisec
Stream: 9227.630765 milisec
ParallelStream: 1920.749338 milisec
Stream: 1096.067528 milisec
ParallelStream: 5254.60191 milisec
Stream: 9326.836975 milisec
ParallelStream: 1924.956848 milisec
Stream: 6865.812183 milisec
ParallelStream: 2112.61936 milisec
#JDK10 [20_000_000 integers] #Corei7 4790 #Windows10
Stream: 2627.744455 milisec
ParallelStream: 1862.677424 milisec
Stream: 3058.011678 milisec
ParallelStream: 2754.965704 milisec
Stream: 1734.097379 milisec
ParallelStream: 2959.054535 milisec
Stream: 1986.801175 milisec
ParallelStream: 2721.472891 milisec
Stream: 3087.238709 milisec
ParallelStream: 2432.054392 milisec
Stream: 2913.872984 milisec
ParallelStream: 2553.386865 milisec
Stream: 2890.751857 milisec
ParallelStream: 1586.459711 milisec
Stream: 1971.080591 milisec
ParallelStream: 1771.570487 milisec
Stream: 2763.10672 milisec
ParallelStream: 1605.66386 milisec
Stream: 3546.110436 milisec
ParallelStream: 1229.410088 milisec

