Skip to content

Commit 88560dc

Browse files
committed
Update JavaTypeResolution benchmarks for jackson-databind#3875
Initial results (on worksation, lots of noise) with 14 threads on jdk17: On 2.14.2 ``` Benchmark (cache) Mode Cnt Score Error Units JavaTypeResolution.constructSpecializedType DEFAULT thrpt 3 221.039 ± 1908.262 ops/s JavaTypeResolution.constructSpecializedType NONE thrpt 3 3102286.667 ± 488989.208 ops/s JavaTypeResolution.resolveArrayList DEFAULT thrpt 3 14339078.820 ± 318162.210 ops/s JavaTypeResolution.resolveArrayList NONE thrpt 3 2473270.152 ± 227676.820 ops/s JavaTypeResolution.resolveMapAny DEFAULT thrpt 3 10048201.834 ± 5163859.321 ops/s JavaTypeResolution.resolveMapAny NONE thrpt 3 434471719.282 ± 14413701.163 ops/s JavaTypeResolution.resolveMapLinkedHash DEFAULT thrpt 3 13757656.215 ± 1045616.393 ops/s JavaTypeResolution.resolveMapLinkedHash NONE thrpt 3 2559090.075 ± 437677.311 ops/s JavaTypeResolution.resolveObject DEFAULT thrpt 3 4323894501.354 ± 2688612017.140 ops/s JavaTypeResolution.resolveObject NONE thrpt 3 4549588001.488 ± 552744650.568 ops/s ``` On 2.14.3-SNAPSHOT including FasterXML/jackson-databind#3875: ``` Benchmark (cache) Mode Cnt Score Error Units JavaTypeResolution.constructSpecializedType DEFAULT thrpt 3 1983483.857 ± 80097.856 ops/s JavaTypeResolution.constructSpecializedType NONE thrpt 3 3622552.643 ± 170576.197 ops/s JavaTypeResolution.resolveArrayList DEFAULT thrpt 3 12949784.671 ± 3821758.659 ops/s JavaTypeResolution.resolveArrayList NONE thrpt 3 1199467.698 ± 372398.479 ops/s JavaTypeResolution.resolveMapAny DEFAULT thrpt 3 7919444.290 ± 3581082.271 ops/s JavaTypeResolution.resolveMapAny NONE thrpt 3 436201734.021 ± 1160702.738 ops/s JavaTypeResolution.resolveMapLinkedHash DEFAULT thrpt 3 8020427.692 ± 2907290.823 ops/s JavaTypeResolution.resolveMapLinkedHash NONE thrpt 3 2535328.286 ± 373330.119 ops/s JavaTypeResolution.resolveObject DEFAULT thrpt 3 2282751657.588 ± 97095607.766 ops/s JavaTypeResolution.resolveObject NONE thrpt 3 2285794906.563 ± 183832231.667 ops/s ```
1 parent ec6e199 commit 88560dc

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)