From 0b1a16eea784bac9a9c442aba2583095659d7162 Mon Sep 17 00:00:00 2001 From: Daniel Strmecki Date: Mon, 3 May 2021 11:18:02 +0200 Subject: [PATCH 1/5] BAEL-4876: Parallel stream examples added --- core-java-modules/core-java-streams-3/pom.xml | 1 + .../streams/parallel/ParallelStream.java | 14 ++++++ .../streams/parallel/SequentialStream.java | 14 ++++++ .../streams/parallel/ForkJoinUnitTest.java | 45 +++++++++++++++++++ 4 files changed, 74 insertions(+) create mode 100644 core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/ParallelStream.java create mode 100644 core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SequentialStream.java create mode 100644 core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/parallel/ForkJoinUnitTest.java diff --git a/core-java-modules/core-java-streams-3/pom.xml b/core-java-modules/core-java-streams-3/pom.xml index 6597c999d8..2ec2fa7c48 100644 --- a/core-java-modules/core-java-streams-3/pom.xml +++ b/core-java-modules/core-java-streams-3/pom.xml @@ -47,6 +47,7 @@ + 1.18.20 3.6.1 diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/ParallelStream.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/ParallelStream.java new file mode 100644 index 0000000000..deeaf9ed59 --- /dev/null +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/ParallelStream.java @@ -0,0 +1,14 @@ +package com.baeldung.streams.parallel; + +import java.util.List; + +public class ParallelStream { + + public static void main(String[] args) { + List listOfNumbers = List.of(1, 2, 3, 4); + listOfNumbers.parallelStream().forEach(number -> + System.out.println(number + " " + Thread.currentThread().getName()) + ); + } + +} diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SequentialStream.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SequentialStream.java new file mode 100644 index 0000000000..0e9c42640b --- /dev/null +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SequentialStream.java @@ -0,0 +1,14 @@ +package com.baeldung.streams.parallel; + +import java.util.List; + +public class SequentialStream { + + public static void main(String[] args) { + List listOfNumbers = List.of(1, 2, 3, 4); + listOfNumbers.stream().forEach(number -> + System.out.println(number + " " + Thread.currentThread().getName()) + ); + } + +} diff --git a/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/parallel/ForkJoinUnitTest.java b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/parallel/ForkJoinUnitTest.java new file mode 100644 index 0000000000..12cf5ceb16 --- /dev/null +++ b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/parallel/ForkJoinUnitTest.java @@ -0,0 +1,45 @@ +package com.baeldung.streams.parallel; + +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ForkJoinPool; + +import static org.assertj.core.api.Assertions.assertThat; + +class ForkJoinUnitTest { + + @Test + void givenSequentialStreamOfNumbers_whenReducingSumWithIdentityFive_thenResultIsCorrect() { + List listOfNumbers = List.of(1, 2, 3, 4); + int sum = listOfNumbers.stream().reduce(5, Integer::sum); + assertThat(sum).isEqualTo(15); + } + + @Test + void givenParallelStreamOfNumbers_whenReducingSumWithIdentityFive_thenResultIsNotCorrect() { + List listOfNumbers = List.of(1, 2, 3, 4); + int sum = listOfNumbers.parallelStream().reduce(5, Integer::sum); + assertThat(sum).isNotEqualTo(15); + } + + @Test + void givenParallelStreamOfNumbers_whenReducingSumWithIdentityZero_thenResultIsCorrect() { + List listOfNumbers = List.of(1, 2, 3, 4); + int sum = listOfNumbers.parallelStream().reduce(0, Integer::sum) + 5; + assertThat(sum).isEqualTo(15); + } + + @Test + public void givenParallelStreamOfNumbers_whenUsingCustomThreadPool_thenResultIsCorrect() + throws InterruptedException, ExecutionException { + List listOfNumbers = List.of(1, 2, 3, 4); + ForkJoinPool customThreadPool = new ForkJoinPool(4); + int sum = customThreadPool.submit( + () -> listOfNumbers.parallelStream().reduce(0, Integer::sum)).get(); + customThreadPool.shutdown(); + assertThat(sum).isEqualTo(10); + } + +} From 4f350873c066d9cb7671e48dc0e1081747c43513 Mon Sep 17 00:00:00 2001 From: Daniel Strmecki Date: Mon, 3 May 2021 11:52:32 +0200 Subject: [PATCH 2/5] BAEL-4876: Use Java 8 API --- .../com/baeldung/streams/parallel/ParallelStream.java | 3 ++- .../com/baeldung/streams/parallel/SequentialStream.java | 3 ++- .../com/baeldung/streams/parallel/ForkJoinUnitTest.java | 9 +++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/ParallelStream.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/ParallelStream.java index deeaf9ed59..f236f418e8 100644 --- a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/ParallelStream.java +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/ParallelStream.java @@ -1,11 +1,12 @@ package com.baeldung.streams.parallel; +import java.util.Arrays; import java.util.List; public class ParallelStream { public static void main(String[] args) { - List listOfNumbers = List.of(1, 2, 3, 4); + List listOfNumbers = Arrays.asList(1, 2, 3, 4); listOfNumbers.parallelStream().forEach(number -> System.out.println(number + " " + Thread.currentThread().getName()) ); diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SequentialStream.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SequentialStream.java index 0e9c42640b..01379130fa 100644 --- a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SequentialStream.java +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SequentialStream.java @@ -1,11 +1,12 @@ package com.baeldung.streams.parallel; +import java.util.Arrays; import java.util.List; public class SequentialStream { public static void main(String[] args) { - List listOfNumbers = List.of(1, 2, 3, 4); + List listOfNumbers = Arrays.asList(1, 2, 3, 4); listOfNumbers.stream().forEach(number -> System.out.println(number + " " + Thread.currentThread().getName()) ); diff --git a/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/parallel/ForkJoinUnitTest.java b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/parallel/ForkJoinUnitTest.java index 12cf5ceb16..f9aab8ed6c 100644 --- a/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/parallel/ForkJoinUnitTest.java +++ b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/parallel/ForkJoinUnitTest.java @@ -2,6 +2,7 @@ package com.baeldung.streams.parallel; import org.junit.jupiter.api.Test; +import java.util.Arrays; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.ForkJoinPool; @@ -12,21 +13,21 @@ class ForkJoinUnitTest { @Test void givenSequentialStreamOfNumbers_whenReducingSumWithIdentityFive_thenResultIsCorrect() { - List listOfNumbers = List.of(1, 2, 3, 4); + List listOfNumbers = Arrays.asList(1, 2, 3, 4); int sum = listOfNumbers.stream().reduce(5, Integer::sum); assertThat(sum).isEqualTo(15); } @Test void givenParallelStreamOfNumbers_whenReducingSumWithIdentityFive_thenResultIsNotCorrect() { - List listOfNumbers = List.of(1, 2, 3, 4); + List listOfNumbers = Arrays.asList(1, 2, 3, 4); int sum = listOfNumbers.parallelStream().reduce(5, Integer::sum); assertThat(sum).isNotEqualTo(15); } @Test void givenParallelStreamOfNumbers_whenReducingSumWithIdentityZero_thenResultIsCorrect() { - List listOfNumbers = List.of(1, 2, 3, 4); + List listOfNumbers = Arrays.asList(1, 2, 3, 4); int sum = listOfNumbers.parallelStream().reduce(0, Integer::sum) + 5; assertThat(sum).isEqualTo(15); } @@ -34,7 +35,7 @@ class ForkJoinUnitTest { @Test public void givenParallelStreamOfNumbers_whenUsingCustomThreadPool_thenResultIsCorrect() throws InterruptedException, ExecutionException { - List listOfNumbers = List.of(1, 2, 3, 4); + List listOfNumbers = Arrays.asList(1, 2, 3, 4); ForkJoinPool customThreadPool = new ForkJoinPool(4); int sum = customThreadPool.submit( () -> listOfNumbers.parallelStream().reduce(0, Integer::sum)).get(); From 2cedfb2a35344fe50828f3dccb77095bda7e3c2e Mon Sep 17 00:00:00 2001 From: Daniel Strmecki Date: Mon, 3 May 2021 19:43:16 +0200 Subject: [PATCH 3/5] BAEL-4876: Add benchmark --- core-java-modules/core-java-streams-3/pom.xml | 11 ++++ .../parallel/DifferentSourceSplitting.java | 52 +++++++++++++++++++ .../streams/parallel/SplittingCosts.java | 26 ++++++++++ 3 files changed, 89 insertions(+) create mode 100644 core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java create mode 100644 core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SplittingCosts.java diff --git a/core-java-modules/core-java-streams-3/pom.xml b/core-java-modules/core-java-streams-3/pom.xml index 2ec2fa7c48..fb525decc3 100644 --- a/core-java-modules/core-java-streams-3/pom.xml +++ b/core-java-modules/core-java-streams-3/pom.xml @@ -27,6 +27,17 @@ ${lombok.version} provided + + org.openjdk.jmh + jmh-core + ${jmh-core.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh-generator.version} + test + org.assertj diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java new file mode 100644 index 0000000000..37d7d25bf6 --- /dev/null +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java @@ -0,0 +1,52 @@ +package com.baeldung.streams.parallel; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Mode; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.stream.IntStream; + +public class DifferentSourceSplitting { + + private static final List arrayListOfNumbers = new ArrayList<>(); + private static final List linkedListOfNumbers = new LinkedList<>(); + + static { + IntStream.rangeClosed(1, 100_000_000).forEach(i -> { + arrayListOfNumbers.add(i); + linkedListOfNumbers.add(i); + }); + } + + public static void main(String[] args) throws Exception { + org.openjdk.jmh.Main.main(args); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + public static void arrayListSequential() { + arrayListOfNumbers.stream().reduce(0, Integer::sum); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + public static void arrayListParallel() { + arrayListOfNumbers.parallelStream().reduce(0, Integer::sum); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + public static void linkedListSequential() { + linkedListOfNumbers.stream().reduce(0, Integer::sum); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + public static void linkedListParallel() { + linkedListOfNumbers.parallelStream().reduce(0, Integer::sum); + } + +} diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SplittingCosts.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SplittingCosts.java new file mode 100644 index 0000000000..1f9f7f062b --- /dev/null +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SplittingCosts.java @@ -0,0 +1,26 @@ +package com.baeldung.streams.parallel; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Mode; +import java.util.stream.IntStream; + +public class SplittingCosts { + + public static void main(String[] args) throws Exception { + org.openjdk.jmh.Main.main(args); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + public static void arrayListSequential() { + IntStream.rangeClosed(1, 1_000).reduce(0, Integer::sum); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + public static void arrayListParallel() { + IntStream.rangeClosed(1, 1_000).parallel().reduce(0, Integer::sum); + } + +} From cbcba3f0aa8aeb5e74f273746cdcdef69fe1ad0f Mon Sep 17 00:00:00 2001 From: Daniel Strmecki Date: Sun, 9 May 2021 11:41:35 +0200 Subject: [PATCH 4/5] BAEL-4876: Add more benchmarks --- core-java-modules/core-java-streams-3/pom.xml | 22 +++++++- .../streams/parallel/BenchmarkRunner.java | 9 ++++ .../parallel/DifferentSourceSplitting.java | 20 +++---- .../streams/parallel/MemoryLocalityCosts.java | 52 +++++++++++++++++++ .../streams/parallel/MergingCosts.java | 52 +++++++++++++++++++ .../streams/parallel/SplittingCosts.java | 21 ++++---- 6 files changed, 155 insertions(+), 21 deletions(-) create mode 100644 core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/BenchmarkRunner.java create mode 100644 core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MemoryLocalityCosts.java create mode 100644 core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MergingCosts.java diff --git a/core-java-modules/core-java-streams-3/pom.xml b/core-java-modules/core-java-streams-3/pom.xml index fb525decc3..068d6df74f 100644 --- a/core-java-modules/core-java-streams-3/pom.xml +++ b/core-java-modules/core-java-streams-3/pom.xml @@ -30,12 +30,12 @@ org.openjdk.jmh jmh-core - ${jmh-core.version} + ${jmh.version} org.openjdk.jmh jmh-generator-annprocess - ${jmh-generator.version} + ${jmh.version} test @@ -55,12 +55,30 @@ true + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + + + + + 1.18.20 3.6.1 + 1.29 diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/BenchmarkRunner.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/BenchmarkRunner.java new file mode 100644 index 0000000000..461d728ad0 --- /dev/null +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/BenchmarkRunner.java @@ -0,0 +1,9 @@ +package com.baeldung.streams.parallel; + +public class BenchmarkRunner { + + public static void main(String[] args) throws Exception { + org.openjdk.jmh.Main.main(args); + } + +} diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java index 37d7d25bf6..3e133c21b1 100644 --- a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java @@ -3,10 +3,12 @@ package com.baeldung.streams.parallel; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; +import java.util.concurrent.TimeUnit; import java.util.stream.IntStream; public class DifferentSourceSplitting { @@ -15,37 +17,37 @@ public class DifferentSourceSplitting { private static final List linkedListOfNumbers = new LinkedList<>(); static { - IntStream.rangeClosed(1, 100_000_000).forEach(i -> { + IntStream.rangeClosed(1, 100_000).forEach(i -> { arrayListOfNumbers.add(i); linkedListOfNumbers.add(i); }); } - public static void main(String[] args) throws Exception { - org.openjdk.jmh.Main.main(args); - } - @Benchmark @BenchmarkMode(Mode.AverageTime) - public static void arrayListSequential() { + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void differentSourceArrayListSequential() { arrayListOfNumbers.stream().reduce(0, Integer::sum); } @Benchmark @BenchmarkMode(Mode.AverageTime) - public static void arrayListParallel() { + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void differentSourceArrayListParallel() { arrayListOfNumbers.parallelStream().reduce(0, Integer::sum); } @Benchmark @BenchmarkMode(Mode.AverageTime) - public static void linkedListSequential() { + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void differentSourceLinkedListSequential() { linkedListOfNumbers.stream().reduce(0, Integer::sum); } @Benchmark @BenchmarkMode(Mode.AverageTime) - public static void linkedListParallel() { + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void differentSourceLinkedListParallel() { linkedListOfNumbers.parallelStream().reduce(0, Integer::sum); } diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MemoryLocalityCosts.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MemoryLocalityCosts.java new file mode 100644 index 0000000000..9bb6fcaa81 --- /dev/null +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MemoryLocalityCosts.java @@ -0,0 +1,52 @@ +package com.baeldung.streams.parallel; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; + +import java.util.Arrays; +import java.util.concurrent.TimeUnit; +import java.util.stream.IntStream; + +public class MemoryLocalityCosts { + + private static final int[] intArray = new int[100_000]; + private static final Integer[] integerArray = new Integer[100_000]; + + static { + IntStream.rangeClosed(1, 100_000).forEach(i -> { + intArray[i-1] = i; + integerArray[i-1] = i; + }); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void localityIntArraySequential() { + Arrays.stream(intArray).reduce(0, Integer::sum); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void localityIntArrayParallel() { + Arrays.stream(intArray).parallel().reduce(0, Integer::sum); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void localityIntegerArraySequential() { + Arrays.stream(integerArray).reduce(0, Integer::sum); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void localityIntegerArrayParallel() { + Arrays.stream(integerArray).parallel().reduce(0, Integer::sum); + } + +} diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MergingCosts.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MergingCosts.java new file mode 100644 index 0000000000..7266f6954f --- /dev/null +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MergingCosts.java @@ -0,0 +1,52 @@ +package com.baeldung.streams.parallel; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class MergingCosts { + + private static final List arrayListOfNumbers = new ArrayList<>(); + + static { + IntStream.rangeClosed(1, 100_000).forEach(i -> { + arrayListOfNumbers.add(i); + }); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void mergingCostsSumSequential() { + arrayListOfNumbers.stream().reduce(0, Integer::sum); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void mergingCostsSumParallel() { + arrayListOfNumbers.stream().parallel().reduce(0, Integer::sum); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void mergingCostsGroupingSequential() { + arrayListOfNumbers.stream().collect(Collectors.groupingBy(i -> i % 2 == 0)); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void mergingCostsGroupingParallel() { + arrayListOfNumbers.stream().parallel().collect(Collectors.groupingBy(i -> i % 2 == 0)); + } + +} diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SplittingCosts.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SplittingCosts.java index 1f9f7f062b..d1e878df1f 100644 --- a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SplittingCosts.java +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SplittingCosts.java @@ -3,24 +3,25 @@ package com.baeldung.streams.parallel; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; + +import java.util.concurrent.TimeUnit; import java.util.stream.IntStream; public class SplittingCosts { - public static void main(String[] args) throws Exception { - org.openjdk.jmh.Main.main(args); + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void sourceSplittingIntStreamSequential() { + IntStream.rangeClosed(1, 100).reduce(0, Integer::sum); } @Benchmark @BenchmarkMode(Mode.AverageTime) - public static void arrayListSequential() { - IntStream.rangeClosed(1, 1_000).reduce(0, Integer::sum); - } - - @Benchmark - @BenchmarkMode(Mode.AverageTime) - public static void arrayListParallel() { - IntStream.rangeClosed(1, 1_000).parallel().reduce(0, Integer::sum); + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void sourceSplittingIntStreamParallel() { + IntStream.rangeClosed(1, 100).parallel().reduce(0, Integer::sum); } } From 081420dbaaf5e84b3897bd0331d5fea3a3c0f83c Mon Sep 17 00:00:00 2001 From: Daniel Strmecki Date: Sun, 9 May 2021 20:29:29 +0200 Subject: [PATCH 5/5] BAEL-4876: Add more data --- .../baeldung/streams/parallel/DifferentSourceSplitting.java | 2 +- .../com/baeldung/streams/parallel/MemoryLocalityCosts.java | 6 +++--- .../java/com/baeldung/streams/parallel/MergingCosts.java | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java index 3e133c21b1..9ad569df30 100644 --- a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java @@ -17,7 +17,7 @@ public class DifferentSourceSplitting { private static final List linkedListOfNumbers = new LinkedList<>(); static { - IntStream.rangeClosed(1, 100_000).forEach(i -> { + IntStream.rangeClosed(1, 1_000_000).forEach(i -> { arrayListOfNumbers.add(i); linkedListOfNumbers.add(i); }); diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MemoryLocalityCosts.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MemoryLocalityCosts.java index 9bb6fcaa81..bc5cbf491b 100644 --- a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MemoryLocalityCosts.java +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MemoryLocalityCosts.java @@ -11,11 +11,11 @@ import java.util.stream.IntStream; public class MemoryLocalityCosts { - private static final int[] intArray = new int[100_000]; - private static final Integer[] integerArray = new Integer[100_000]; + private static final int[] intArray = new int[1_000_000]; + private static final Integer[] integerArray = new Integer[1_000_000]; static { - IntStream.rangeClosed(1, 100_000).forEach(i -> { + IntStream.rangeClosed(1, 1_000_000).forEach(i -> { intArray[i-1] = i; integerArray[i-1] = i; }); diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MergingCosts.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MergingCosts.java index 7266f6954f..a9919dbe72 100644 --- a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MergingCosts.java +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MergingCosts.java @@ -16,7 +16,7 @@ public class MergingCosts { private static final List arrayListOfNumbers = new ArrayList<>(); static { - IntStream.rangeClosed(1, 100_000).forEach(i -> { + IntStream.rangeClosed(1, 1_000_000).forEach(i -> { arrayListOfNumbers.add(i); }); } @@ -39,14 +39,14 @@ public class MergingCosts { @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.NANOSECONDS) public static void mergingCostsGroupingSequential() { - arrayListOfNumbers.stream().collect(Collectors.groupingBy(i -> i % 2 == 0)); + arrayListOfNumbers.stream().collect(Collectors.toSet()); } @Benchmark @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.NANOSECONDS) public static void mergingCostsGroupingParallel() { - arrayListOfNumbers.stream().parallel().collect(Collectors.groupingBy(i -> i % 2 == 0)); + arrayListOfNumbers.stream().parallel().collect(Collectors.toSet()); } }