Skip to content

Commit 26196ca

Browse files
committed
Map benchmarks
1 parent 53408fd commit 26196ca

1 file changed

Lines changed: 90 additions & 0 deletions

File tree

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package benchmark;
2+
3+
import com.google.common.collect.ImmutableMap;
4+
import org.openjdk.jmh.annotations.Benchmark;
5+
import org.openjdk.jmh.annotations.BenchmarkMode;
6+
import org.openjdk.jmh.annotations.Fork;
7+
import org.openjdk.jmh.annotations.Level;
8+
import org.openjdk.jmh.annotations.Measurement;
9+
import org.openjdk.jmh.annotations.Mode;
10+
import org.openjdk.jmh.annotations.Scope;
11+
import org.openjdk.jmh.annotations.Setup;
12+
import org.openjdk.jmh.annotations.State;
13+
import org.openjdk.jmh.annotations.Warmup;
14+
import org.openjdk.jmh.infra.Blackhole;
15+
import org.openjdk.jmh.runner.Runner;
16+
import org.openjdk.jmh.runner.options.Options;
17+
import org.openjdk.jmh.runner.options.OptionsBuilder;
18+
19+
import java.util.HashMap;
20+
import java.util.LinkedHashMap;
21+
import java.util.Map;
22+
import java.util.Random;
23+
24+
@State(Scope.Benchmark)
25+
@Warmup(iterations = 2, time = 5)
26+
@Measurement(iterations = 3, batchSize = 1000)
27+
@Fork(3)
28+
public class MapBenchmark {
29+
30+
int numberEntries = 30;
31+
32+
Map<String, Integer> hashMap;
33+
Map<String, Integer> linkedHashMap;
34+
Map<String, Integer> immutableMap;
35+
36+
Random random;
37+
38+
@Setup(Level.Trial)
39+
public void setUp() {
40+
random = new Random();
41+
linkedHashMap = new LinkedHashMap<>();
42+
for (int i = 0; i < numberEntries; i++) {
43+
linkedHashMap.put("string" + i, i);
44+
}
45+
hashMap = new HashMap<>();
46+
for (int i = 0; i < numberEntries; i++) {
47+
hashMap.put("string" + i, i);
48+
}
49+
ImmutableMap.Builder<String, Integer> builder = ImmutableMap.builder();
50+
for (int i = 0; i < numberEntries; i++) {
51+
builder.put("string" + i, i);
52+
}
53+
immutableMap = builder.build();
54+
}
55+
56+
@Benchmark
57+
@BenchmarkMode(Mode.Throughput)
58+
public void benchmarkLinkedHashMap(Blackhole blackhole) {
59+
mapGet(blackhole, linkedHashMap);
60+
}
61+
@Benchmark
62+
@BenchmarkMode(Mode.Throughput)
63+
public void benchmarkHashMap(Blackhole blackhole) {
64+
mapGet(blackhole, hashMap);
65+
}
66+
67+
@Benchmark
68+
@BenchmarkMode(Mode.Throughput)
69+
public void benchmarkImmutableMap(Blackhole blackhole) {
70+
mapGet(blackhole, immutableMap);
71+
}
72+
73+
private void mapGet(Blackhole blackhole, Map<String, Integer> mapp) {
74+
int index = rand(0, numberEntries);
75+
blackhole.consume(mapp.get("string" + index));
76+
}
77+
78+
private int rand(int loInc, int hiExc) {
79+
return random.nextInt(hiExc - loInc) + loInc;
80+
}
81+
82+
public static void main(String[] args) throws Exception {
83+
Options opt = new OptionsBuilder()
84+
.include("benchmark.MapBenchmark")
85+
.build();
86+
87+
new Runner(opt).run();
88+
}
89+
}
90+

0 commit comments

Comments
 (0)