Skip to content

Commit e88ef76

Browse files
MherBaghinyanpivovarit
authored andcommitted
Bael 2052 (eugenp#5051)
* collections benchmark tests * more benchmark tests * set benchmark tests * include linkedlist in benchmark tests * Update ArrayListBenchmark.java
1 parent 4bb6592 commit e88ef76

5 files changed

Lines changed: 310 additions & 0 deletions

File tree

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package com.baeldung.performance;
2+
3+
import org.openjdk.jmh.annotations.*;
4+
import org.openjdk.jmh.runner.Runner;
5+
import org.openjdk.jmh.runner.options.Options;
6+
import org.openjdk.jmh.runner.options.OptionsBuilder;
7+
8+
import java.util.*;
9+
import java.util.concurrent.TimeUnit;
10+
11+
@BenchmarkMode(Mode.AverageTime)
12+
@OutputTimeUnit(TimeUnit.MICROSECONDS)
13+
@Warmup(iterations = 10)
14+
public class ArrayListBenchmark {
15+
16+
@State(Scope.Thread)
17+
public static class MyState {
18+
19+
List<Employee> employeeList = new ArrayList<>();
20+
//LinkedList<Employee> employeeList = new LinkedList<>();
21+
22+
long iterations = 100000;
23+
24+
Employee employee = new Employee(100L, "Harry");
25+
26+
int employeeIndex = -1;
27+
28+
@Setup(Level.Trial)
29+
public void setUp() {
30+
for (long i = 0; i < iterations; i++) {
31+
employeeList.add(new Employee(i, "John"));
32+
}
33+
34+
employeeList.add(employee);
35+
employeeIndex = employeeList.indexOf(employee);
36+
}
37+
}
38+
39+
@Benchmark
40+
public void testAddAt(ArrayListBenchmark.MyState state) {
41+
state.employeeList.add((int) (state.iterations), new Employee(state.iterations, "John"));
42+
}
43+
44+
@Benchmark
45+
public boolean testContains(ArrayListBenchmark.MyState state) {
46+
return state.employeeList.contains(state.employee);
47+
}
48+
49+
@Benchmark
50+
public int testIndexOf(ArrayListBenchmark.MyState state) {
51+
return state.employeeList.indexOf(state.employee);
52+
}
53+
54+
@Benchmark
55+
public Employee testGet(ArrayListBenchmark.MyState state) {
56+
return state.employeeList.get(state.employeeIndex);
57+
}
58+
59+
@Benchmark
60+
public boolean testRemove(ArrayListBenchmark.MyState state) {
61+
return state.employeeList.remove(state.employee);
62+
}
63+
64+
// @Benchmark
65+
// public void testAdd(ArrayListBenchmark.MyState state) {
66+
// state.employeeList.add(new Employee(state.iterations + 1, "John"));
67+
// }
68+
69+
public static void main(String[] args) throws Exception {
70+
Options options = new OptionsBuilder()
71+
.include(ArrayListBenchmark.class.getSimpleName()).threads(1)
72+
.forks(1).shouldFailOnError(true)
73+
.shouldDoGC(true)
74+
.jvmArgs("-server").build();
75+
new Runner(options).run();
76+
}
77+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package com.baeldung.performance;
2+
3+
import org.openjdk.jmh.annotations.*;
4+
import org.openjdk.jmh.runner.Runner;
5+
import org.openjdk.jmh.runner.options.Options;
6+
import org.openjdk.jmh.runner.options.OptionsBuilder;
7+
8+
import java.util.concurrent.CopyOnWriteArrayList;
9+
import java.util.concurrent.TimeUnit;
10+
11+
@BenchmarkMode(Mode.AverageTime)
12+
@OutputTimeUnit(TimeUnit.MICROSECONDS)
13+
@Warmup(iterations = 10)
14+
public class CopyOnWriteBenchmark {
15+
16+
@State(Scope.Thread)
17+
public static class MyState {
18+
19+
CopyOnWriteArrayList<Employee> employeeList = new CopyOnWriteArrayList<>();
20+
21+
long iterations = 100000;
22+
23+
Employee employee = new Employee(100L, "Harry");
24+
25+
int employeeIndex = -1;
26+
27+
@Setup(Level.Trial)
28+
public void setUp() {
29+
for (long i = 0; i < iterations; i++) {
30+
employeeList.add(new Employee(i, "John"));
31+
}
32+
33+
employeeList.add(employee);
34+
35+
employeeIndex = employeeList.indexOf(employee);
36+
}
37+
}
38+
39+
@Benchmark
40+
public void testAdd(CopyOnWriteBenchmark.MyState state) {
41+
state.employeeList.add(new Employee(state.iterations + 1, "John"));
42+
}
43+
44+
@Benchmark
45+
public void testAddAt(CopyOnWriteBenchmark.MyState state) {
46+
state.employeeList.add((int) (state.iterations), new Employee(state.iterations, "John"));
47+
}
48+
49+
@Benchmark
50+
public boolean testContains(CopyOnWriteBenchmark.MyState state) {
51+
return state.employeeList.contains(state.employee);
52+
}
53+
54+
@Benchmark
55+
public int testIndexOf(CopyOnWriteBenchmark.MyState state) {
56+
return state.employeeList.indexOf(state.employee);
57+
}
58+
59+
@Benchmark
60+
public Employee testGet(CopyOnWriteBenchmark.MyState state) {
61+
return state.employeeList.get(state.employeeIndex);
62+
}
63+
64+
@Benchmark
65+
public boolean testRemove(CopyOnWriteBenchmark.MyState state) {
66+
return state.employeeList.remove(state.employee);
67+
}
68+
69+
70+
public static void main(String[] args) throws Exception {
71+
Options options = new OptionsBuilder()
72+
.include(CopyOnWriteBenchmark.class.getSimpleName()).threads(1)
73+
.forks(1).shouldFailOnError(true)
74+
.shouldDoGC(true)
75+
.jvmArgs("-server").build();
76+
new Runner(options).run();
77+
}
78+
}

core-java-collections/src/main/java/com/baeldung/performance/Employee.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,22 @@ public Employee(Long id, String name) {
1010
this.id = id;
1111
}
1212

13+
public Long getId() {
14+
return id;
15+
}
16+
17+
public void setId(Long id) {
18+
this.id = id;
19+
}
20+
21+
public String getName() {
22+
return name;
23+
}
24+
25+
public void setName(String name) {
26+
this.name = name;
27+
}
28+
1329
@Override
1430
public boolean equals(Object o) {
1531
if (this == o) return true;
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package com.baeldung.performance;
2+
3+
import org.openjdk.jmh.annotations.*;
4+
import org.openjdk.jmh.runner.Runner;
5+
import org.openjdk.jmh.runner.options.Options;
6+
import org.openjdk.jmh.runner.options.OptionsBuilder;
7+
8+
import java.util.*;
9+
import java.util.concurrent.TimeUnit;
10+
11+
@BenchmarkMode(Mode.AverageTime)
12+
@OutputTimeUnit(TimeUnit.MICROSECONDS)
13+
@Warmup(iterations = 10)
14+
public class HashMapBenchmark {
15+
16+
@State(Scope.Thread)
17+
public static class MyState {
18+
19+
Map<Long, Employee> employeeMap = new HashMap<>();
20+
//LinkedHashMap<Long, Employee> employeeMap = new LinkedHashMap<>();
21+
//IdentityHashMap<Long, Employee> employeeMap = new IdentityHashMap<>();
22+
//WeakHashMap<Long, Employee> employeeMap = new WeakHashMap<>();
23+
//ConcurrentHashMap<Long, Employee> employeeMap = new ConcurrentHashMap<>();
24+
//ConcurrentSkipListMap<Long, Employee> employeeMap = new ConcurrentSkipListMap <>();
25+
26+
// TreeMap
27+
28+
long iterations = 100000;
29+
30+
Employee employee = new Employee(100L, "Harry");
31+
32+
int employeeIndex = -1;
33+
34+
@Setup(Level.Trial)
35+
public void setUp() {
36+
for (long i = 0; i < iterations; i++) {
37+
employeeMap.put(i, new Employee(i, "John"));
38+
}
39+
40+
//employeeMap.put(iterations, employee);
41+
}
42+
}
43+
44+
@Benchmark
45+
public Employee testGet(HashMapBenchmark.MyState state) {
46+
return state.employeeMap.get(state.iterations);
47+
}
48+
49+
@Benchmark
50+
public Employee testRemove(HashMapBenchmark.MyState state) {
51+
return state.employeeMap.remove(state.iterations);
52+
}
53+
54+
@Benchmark
55+
public Employee testPut(HashMapBenchmark.MyState state) {
56+
return state.employeeMap.put(state.employee.getId(), state.employee);
57+
}
58+
59+
@Benchmark
60+
public Boolean testContainsKey(HashMapBenchmark.MyState state) {
61+
return state.employeeMap.containsKey(state.employee.getId());
62+
}
63+
64+
65+
public static void main(String[] args) throws Exception {
66+
Options options = new OptionsBuilder()
67+
.include(HashMapBenchmark.class.getSimpleName()).threads(1)
68+
.forks(1).shouldFailOnError(true)
69+
.shouldDoGC(true)
70+
.jvmArgs("-server").build();
71+
new Runner(options).run();
72+
}
73+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package com.baeldung.performance;
2+
3+
import org.openjdk.jmh.annotations.*;
4+
import org.openjdk.jmh.runner.Runner;
5+
import org.openjdk.jmh.runner.options.Options;
6+
import org.openjdk.jmh.runner.options.OptionsBuilder;
7+
8+
import java.util.HashSet;
9+
import java.util.LinkedHashSet;
10+
import java.util.Set;
11+
import java.util.TreeSet;
12+
import java.util.concurrent.ConcurrentSkipListSet;
13+
import java.util.concurrent.TimeUnit;
14+
15+
@BenchmarkMode(Mode.AverageTime)
16+
@OutputTimeUnit(TimeUnit.MICROSECONDS)
17+
@Warmup(iterations = 10)
18+
public class SetBenchMark {
19+
20+
@State(Scope.Thread)
21+
public static class MyState {
22+
23+
//Set<Employee> employeeSet = new HashSet<>();
24+
LinkedHashSet<Employee> employeeSet = new LinkedHashSet<>();
25+
//ConcurrentSkipListSet<Employee> employeeSet = new ConcurrentSkipListSet <>();
26+
27+
// TreeSet 
28+
29+
long iterations = 1000;
30+
Employee employee = new Employee(100L, "Harry");
31+
32+
@Setup(Level.Trial)
33+
public void setUp() {
34+
for (long i = 0; i < iterations; i++) {
35+
employeeSet.add(new Employee(i, "John"));
36+
}
37+
38+
//employeeSet.add(employee);
39+
}
40+
}
41+
42+
@Benchmark
43+
public boolean testAdd(SetBenchMark.MyState state) {
44+
return state.employeeSet.add(state.employee);
45+
}
46+
47+
@Benchmark
48+
public Boolean testContains(SetBenchMark.MyState state) {
49+
return state.employeeSet.contains(state.employee);
50+
}
51+
52+
@Benchmark
53+
public boolean testRemove(SetBenchMark.MyState state) {
54+
return state.employeeSet.remove(state.employee);
55+
}
56+
57+
58+
public static void main(String[] args) throws Exception {
59+
Options options = new OptionsBuilder()
60+
.include(SetBenchMark.class.getSimpleName()).threads(1)
61+
.forks(1).shouldFailOnError(true)
62+
.shouldDoGC(true)
63+
.jvmArgs("-server").build();
64+
new Runner(options).run();
65+
}
66+
}

0 commit comments

Comments
 (0)