diff --git a/core-java-modules/core-java-11/pom.xml b/core-java-modules/core-java-11/pom.xml index 4d950bdf8d..81917b6397 100644 --- a/core-java-modules/core-java-11/pom.xml +++ b/core-java-modules/core-java-11/pom.xml @@ -29,6 +29,27 @@ ${assertj.version} test + + org.openjdk.jmh + jmh-core + ${jmh.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + provided + + + org.eclipse.collections + eclipse-collections + 10.0.0 + + + org.eclipse.collections + eclipse-collections-api + 10.0.0 + @@ -42,6 +63,42 @@ ${maven.compiler.target.version} + + org.apache.maven.plugins + maven-shade-plugin + 3.2.1 + + + package + + shade + + + ${uberjar.name} + + + org.openjdk.jmh.Main + + + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + @@ -50,6 +107,7 @@ 11 27.1-jre 3.11.1 + benchmarks + 1.22 - diff --git a/core-java-modules/core-java-11/src/main/java/com/baeldung/benchmark/IntegerListFilter.java b/core-java-modules/core-java-11/src/main/java/com/baeldung/benchmark/IntegerListFilter.java new file mode 100644 index 0000000000..5961d2d297 --- /dev/null +++ b/core-java-modules/core-java-11/src/main/java/com/baeldung/benchmark/IntegerListFilter.java @@ -0,0 +1,70 @@ +package com.baeldung.benchmark; + +import org.eclipse.collections.api.list.MutableList; +import org.eclipse.collections.api.list.primitive.IntList; +import org.eclipse.collections.api.list.primitive.MutableIntList; +import org.eclipse.collections.impl.factory.primitive.IntLists; +import org.eclipse.collections.impl.list.mutable.FastList; +import org.eclipse.collections.impl.list.mutable.primitive.IntArrayList; +import org.openjdk.jmh.annotations.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.PrimitiveIterator; +import java.util.Random; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +@State(Scope.Benchmark) +@BenchmarkMode(Mode.Throughput) +@OutputTimeUnit(TimeUnit.SECONDS) +@Fork(2) +public class IntegerListFilter { + + private List jdkIntList; + private MutableList ecMutableList; + private IntList ecIntList; + private ExecutorService executor; + + @Setup + public void setup() { + PrimitiveIterator.OfInt iterator = new Random(1L).ints(-10000, 10000).iterator(); + ecMutableList = FastList.newWithNValues(1_000_000, iterator::nextInt); + jdkIntList = new ArrayList<>(1_000_000); + jdkIntList.addAll(ecMutableList); + ecIntList = ecMutableList.collectInt(i -> i, new IntArrayList(1_000_000)); + executor = Executors.newWorkStealingPool(); + } + + @Benchmark + public List jdkList() { + return jdkIntList.stream().filter(i -> i % 5 == 0).collect(Collectors.toList()); + } + + @Benchmark + public MutableList ecMutableList() { + return ecMutableList.select(i -> i % 5 == 0); + } + + @Benchmark + public List jdkListParallel() { + return jdkIntList.parallelStream().filter(i -> i % 5 == 0).collect(Collectors.toList()); + } + + @Benchmark + public MutableList ecMutableListParallel() { + return ecMutableList.asParallel(executor, 100_000).select(i -> i % 5 == 0).toList(); + } + + @Benchmark + public IntList ecPrimitive() { + return this.ecIntList.select(i -> i % 5 == 0); + } + + @Benchmark + public IntList ecPrimitiveParallel() { + return this.ecIntList.primitiveParallelStream().filter(i -> i % 5 == 0).collect(IntLists.mutable::empty, MutableIntList::add, MutableIntList::addAll); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-11/src/main/java/com/baeldung/benchmark/IntegerListSum.java b/core-java-modules/core-java-11/src/main/java/com/baeldung/benchmark/IntegerListSum.java new file mode 100644 index 0000000000..cdb2accc0b --- /dev/null +++ b/core-java-modules/core-java-11/src/main/java/com/baeldung/benchmark/IntegerListSum.java @@ -0,0 +1,67 @@ +package com.baeldung.benchmark; + +import org.eclipse.collections.api.list.MutableList; +import org.eclipse.collections.api.list.primitive.IntList; +import org.eclipse.collections.impl.list.mutable.FastList; +import org.eclipse.collections.impl.list.mutable.primitive.IntArrayList; +import org.openjdk.jmh.annotations.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.PrimitiveIterator; +import java.util.Random; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +@State(Scope.Benchmark) +@BenchmarkMode(Mode.Throughput) +@OutputTimeUnit(TimeUnit.SECONDS) +@Fork(2) +public class IntegerListSum { + + private List jdkIntList; + private MutableList ecMutableList; + private ExecutorService executor; + private IntList ecIntList; + + @Setup + public void setup() { + PrimitiveIterator.OfInt iterator = new Random(1L).ints(-10000, 10000).iterator(); + ecMutableList = FastList.newWithNValues(1_000_000, iterator::nextInt); + jdkIntList = new ArrayList<>(1_000_000); + jdkIntList.addAll(ecMutableList); + ecIntList = ecMutableList.collectInt(i -> i, new IntArrayList(1_000_000)); + executor = Executors.newWorkStealingPool(); + } + + @Benchmark + public long jdkList() { + return jdkIntList.stream().mapToLong(i -> i).sum(); + } + + @Benchmark + public long ecMutableList() { + return ecMutableList.sumOfInt(i -> i); + } + + @Benchmark + public long jdkListParallel() { + return jdkIntList.parallelStream().mapToLong(i -> i).sum(); + } + + @Benchmark + public long ecMutableListParallel() { + return ecMutableList.asParallel(executor, 100_000).sumOfInt(i -> i); + } + + @Benchmark + public long ecPrimitive() { + return this.ecIntList.sum(); + } + + @Benchmark + public long ecPrimitiveParallel() { + return this.ecIntList.primitiveParallelStream().sum(); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-11/src/test/java/com/baeldung/benchmark/IntegerListFilterUnitTest.java b/core-java-modules/core-java-11/src/test/java/com/baeldung/benchmark/IntegerListFilterUnitTest.java new file mode 100644 index 0000000000..bf68ef70e9 --- /dev/null +++ b/core-java-modules/core-java-11/src/test/java/com/baeldung/benchmark/IntegerListFilterUnitTest.java @@ -0,0 +1,33 @@ +package com.baeldung.benchmark; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + + +public class IntegerListFilterUnitTest { + + private IntegerListFilter integerListFilter; + + @Before + public void init() { + integerListFilter = new IntegerListFilter(); + integerListFilter.setup(); + } + + @Test + public void whenBenchmarkIsExecute_thenJDKListsMustBeOfSameSize() { + assertEquals(integerListFilter.jdkList().size(), integerListFilter.jdkListParallel().size()); + } + + @Test + public void whenBenchmarkIsExecute_thenMutableListsMustBeOfSameSize() { + assertEquals(integerListFilter.ecMutableList().size(), integerListFilter.ecMutableListParallel().size()); + } + + @Test + public void whenBenchmarkIsExecute_thenPrimitiveListsMustBeOfSameSize() { + assertEquals(integerListFilter.ecPrimitive().size(), integerListFilter.ecPrimitiveParallel().size()); + } +} diff --git a/core-java-modules/core-java-11/src/test/java/com/baeldung/benchmark/IntegerListSumUnitTest.java b/core-java-modules/core-java-11/src/test/java/com/baeldung/benchmark/IntegerListSumUnitTest.java new file mode 100644 index 0000000000..b375993ffa --- /dev/null +++ b/core-java-modules/core-java-11/src/test/java/com/baeldung/benchmark/IntegerListSumUnitTest.java @@ -0,0 +1,33 @@ +package com.baeldung.benchmark; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + + +public class IntegerListSumUnitTest { + + private IntegerListSum integerListSum; + + @Before + public void init() { + integerListSum = new IntegerListSum(); + integerListSum.setup(); + } + + @Test + public void whenBenchmarkIsExecute_thenJDKListsMustHaveSameValue() { + assertEquals(integerListSum.jdkList(), integerListSum.jdkListParallel()); + } + + @Test + public void whenBenchmarkIsExecute_thenMutableListsMustHaveSameValue() { + assertEquals(integerListSum.ecMutableList(), integerListSum.ecMutableListParallel()); + } + + @Test + public void whenBenchmarkIsExecute_thenPrimitiveListsMustHaveSameValue() { + assertEquals(integerListSum.ecPrimitive(), integerListSum.ecPrimitiveParallel()); + } +} diff --git a/core-java-modules/core-java-11/src/test/resources/sample.txt b/core-java-modules/core-java-11/src/test/resources/sample.txt new file mode 100644 index 0000000000..64be299017 --- /dev/null +++ b/core-java-modules/core-java-11/src/test/resources/sample.txt @@ -0,0 +1 @@ +Sample file content \ No newline at end of file