Skip to content

Commit 199aaae

Browse files
authored
Merge pull request #5 from carterkozak/ckozak/specialized_type_cache_performance
Update JavaTypeResolution benchmarks for jackson-databind#3875
2 parents ec6e199 + 88560dc commit 199aaae

File tree

1 file changed

+78
-10
lines changed

1 file changed

+78
-10
lines changed

src/main/java/com/fasterxml/jackson/perf/zzz/JavaTypeResolution.java

Lines changed: 78 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,45 +2,113 @@
22

33
import java.util.ArrayList;
44
import java.util.LinkedHashMap;
5+
import java.util.List;
56
import java.util.Map;
67
import java.util.concurrent.TimeUnit;
78

9+
import com.fasterxml.jackson.core.type.TypeReference;
10+
import com.fasterxml.jackson.databind.JavaType;
11+
import com.fasterxml.jackson.databind.util.LookupCache;
812
import org.openjdk.jmh.annotations.Benchmark;
913
import org.openjdk.jmh.annotations.OutputTimeUnit;
14+
import org.openjdk.jmh.annotations.Param;
1015
import org.openjdk.jmh.annotations.Scope;
16+
import org.openjdk.jmh.annotations.Setup;
1117
import org.openjdk.jmh.annotations.State;
12-
import org.openjdk.jmh.infra.Blackhole;
1318

1419
import com.fasterxml.jackson.databind.type.TypeFactory;
1520

16-
@State(Scope.Thread)
21+
@State(Scope.Benchmark)
1722
public class JavaTypeResolution
1823
{
24+
25+
@Param
26+
public CacheMode cache;
27+
private TypeFactory tf;
28+
29+
@Setup
30+
public void setup() {
31+
tf = cache.apply(TypeFactory.defaultInstance().withModifier(null));
32+
}
33+
1934
@Benchmark
2035
@OutputTimeUnit(TimeUnit.SECONDS)
21-
public Object resolveArrayList(Blackhole bh) throws Exception {
22-
TypeFactory tf = TypeFactory.defaultInstance().withModifier(null);
36+
public JavaType resolveArrayList() {
2337
return tf.constructType(ArrayList.class);
2438
}
2539

2640
@Benchmark
2741
@OutputTimeUnit(TimeUnit.SECONDS)
28-
public Object resolveMapAny(Blackhole bh) throws Exception {
29-
TypeFactory tf = TypeFactory.defaultInstance().withModifier(null);
42+
public JavaType resolveMapAny() {
3043
return tf.constructType(Map.class);
3144
}
3245

3346
@Benchmark
3447
@OutputTimeUnit(TimeUnit.SECONDS)
35-
public Object resolveMapLinkedHash(Blackhole bh) throws Exception {
36-
TypeFactory tf = TypeFactory.defaultInstance().withModifier(null);
48+
public JavaType resolveMapLinkedHash() {
3749
return tf.constructType(LinkedHashMap.class);
3850
}
3951

4052
@Benchmark
4153
@OutputTimeUnit(TimeUnit.SECONDS)
42-
public Object resolveObject(Blackhole bh) throws Exception {
43-
TypeFactory tf = TypeFactory.defaultInstance().withModifier(null);
54+
public JavaType resolveObject() {
4455
return tf.constructType(Object.class);
4556
}
57+
58+
@Benchmark
59+
@OutputTimeUnit(TimeUnit.SECONDS)
60+
public JavaType constructSpecializedType() {
61+
JavaType listOfCustomObject = tf.constructType(new TypeReference<List<CustomObject>>() {});
62+
return tf.constructSpecializedType(listOfCustomObject, CustomList.class);
63+
}
64+
65+
public static final class CustomObject {}
66+
67+
public static final class CustomList<U> extends ArrayList<U> {}
68+
69+
public enum CacheMode {
70+
@SuppressWarnings("unused") // used by JMH
71+
DEFAULT() {
72+
@Override
73+
TypeFactory apply(TypeFactory input) {
74+
return input;
75+
}
76+
},
77+
@SuppressWarnings("unused") // used by JMH
78+
NONE() {
79+
@Override
80+
TypeFactory apply(TypeFactory input) {
81+
return input.withCache(NoCacheLookupCache.INSTANCE);
82+
}
83+
};
84+
85+
abstract TypeFactory apply(TypeFactory input);
86+
}
87+
88+
private enum NoCacheLookupCache implements LookupCache<Object, JavaType> {
89+
INSTANCE;
90+
91+
@Override
92+
public int size() {
93+
return 0;
94+
}
95+
96+
@Override
97+
public JavaType get(Object o) {
98+
return null;
99+
}
100+
101+
@Override
102+
public JavaType put(Object o, JavaType javaType) {
103+
return null;
104+
}
105+
106+
@Override
107+
public JavaType putIfAbsent(Object o, JavaType javaType) {
108+
return null;
109+
}
110+
111+
@Override
112+
public void clear() {}
113+
}
46114
}

0 commit comments

Comments
 (0)