Performance and Memory Allocation Comparison Between List and Set (#14124)

* Performance and Memory Allocation Comparison Between List and Set in Java

* Performance and Memory Allocation Comparison Between List and Set in Java

* Performance and Memory Allocation Comparison Between List and Set in Java

* Performance and Memory Allocation Comparison Between List and Set in Java
This commit is contained in:
Michael Olayemi 2023-06-12 02:56:58 +00:00 committed by GitHub
parent 5b65c7e54a
commit 680ddfef9c
2 changed files with 126 additions and 0 deletions

View File

@ -0,0 +1,56 @@
package com.baeldung.listandset.benchmark;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.infra.Blackhole;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@BenchmarkMode(Mode.SingleShotTime)
@Warmup(iterations = 3, time = 10, timeUnit = TimeUnit.MILLISECONDS)
@Measurement(iterations = 3, time = 10, timeUnit = TimeUnit.MILLISECONDS)
public class ListAndSetAddBenchmark {
public static void main(String[] args) throws IOException, RunnerException {
Options opt = new OptionsBuilder()
.include(ListAndSetAddBenchmark.class.getSimpleName())
.forks(1)
.addProfiler("gc")
.build();
new Runner(opt).run();
}
@Benchmark
public void addElementToArrayList(Params param, Blackhole blackhole) {
param.arrayList.clear();
for (int i = 0; i < param.addNumber; i++) {
blackhole.consume(param.arrayList.add(i));
}
}
@Benchmark
public void addElementToHashSet(Params param, Blackhole blackhole) {
param.hashSet.clear();
for (int i = 0; i < param.addNumber; i++) {
blackhole.consume(param.hashSet.add(i));
}
}
@State(Scope.Benchmark)
public static class Params {
public int addNumber = 10000000;
public List<Integer> arrayList = new ArrayList<>();
public Set<Integer> hashSet = new HashSet<>();
}
}

View File

@ -0,0 +1,70 @@
package com.baeldung.listandset.benchmark;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.infra.Blackhole;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@BenchmarkMode(Mode.SingleShotTime)
@Warmup(iterations = 3, time = 10, timeUnit = TimeUnit.MILLISECONDS)
@Measurement(iterations = 3, time = 10, timeUnit = TimeUnit.MILLISECONDS)
public class ListAndSetContainsBenchmark {
public static void main(String[] args) throws IOException, RunnerException {
Options opt = new OptionsBuilder()
.include(ListAndSetContainsBenchmark.class.getSimpleName())
.forks(1)
.addProfiler("gc")
.build();
new Runner(opt).run();
}
@Benchmark
public void searchElementInArrayList(Params param, Blackhole blackhole) {
blackhole.consume(param.arrayList.contains(param.searchElement));
}
@Benchmark
public void searchElementInHashSet(Params param, Blackhole blackhole) {
blackhole.consume(param.hashSet.contains(param.searchElement));
}
@State(Scope.Benchmark)
public static class Params {
@Param({"5000000"})
public int searchElement;
@Param({"10000000"})
public int collectionSize;
public List<Integer> arrayList;
public Set<Integer> hashSet;
@Setup(Level.Iteration)
public void setup() {
arrayList = new ArrayList<>();
hashSet = new HashSet<>();
for (int i = 0; i < collectionSize; i++) {
arrayList.add(i);
hashSet.add(i);
}
}
}
}