@@ -13,74 +13,84 @@ The following results were recorded on an _M4 Macbook Pro_, using 8 threads and
1313100,000 entries for each benchmark:
1414
1515- ` SyncMap ` ** get()** speed is...
16- - 4.1 % ** SLOWER ** than ` ConcurrentHashMap ` for an empty map.
17- - 3.9 % ** SLOWER ** than ` ConcurrentHashMap ` for a presized empty map.
18- - 6.7 % ** SLOWER ** than ` ConcurrentHashMap ` for a full map.
16+ - 47.8 % ** FASTER ** than ` ConcurrentHashMap ` for an empty map.
17+ - 48.1 % ** FASTER ** than ` ConcurrentHashMap ` for a presized empty map.
18+ - 21.0 % ** FASTER ** than ` ConcurrentHashMap ` for a full map.
1919
2020- ` SyncMap ` ** put()** speed is...
21- - 44 .8% ** FASTER** than ` ConcurrentHashMap ` for an empty map.
22- - 30.0 % ** SLOWER** than ` ConcurrentHashMap ` for a presized empty map.
23- - 53.9 % ** FASTER** than ` ConcurrentHashMap ` for a full map.
21+ - 23 .8% ** FASTER** than ` ConcurrentHashMap ` for an empty map.
22+ - 14.5 % ** SLOWER** than ` ConcurrentHashMap ` for a presized empty map.
23+ - 32.0 % ** FASTER** than ` ConcurrentHashMap ` for a full map.
2424
2525- ` SyncMap ` ** put()** then ** get()** speed is...
26- - 135.6% ** FASTER** than ` ConcurrentHashMap ` for an empty map.
27- - 66.1% ** FASTER** than ` ConcurrentHashMap ` for a presized empty map.
28- - 86.0% ** FASTER** than ` ConcurrentHashMap ` for a full map.
29-
30- - ` SyncMap ` random ** put()** and ** get()** speed is...
31- - 39.1% ** FASTER** than ` ConcurrentHashMap ` for an empty map.
32- - 38.1% ** FASTER** than ` ConcurrentHashMap ` for a presized empty map.
33- - 37.0% ** FASTER** than ` ConcurrentHashMap ` for a full map.
26+ - 109.7% ** FASTER** than ` ConcurrentHashMap ` for an empty map.
27+ - 70.4% ** FASTER** than ` ConcurrentHashMap ` for a presized empty map.
28+ - 55.1% ** FASTER** than ` ConcurrentHashMap ` for a full map.
3429
3530### Results
3631
3732``` txt
38- Benchmark (implementation) (mode) Mode Cnt Score Error Units
39- SyncMapBenchmark.getOnly ConcurrentHashMap none thrpt 5 2.954 ± 0.016 ops/ns
40- SyncMapBenchmark.getOnly ConcurrentHashMap presize thrpt 5 2.936 ± 0.005 ops/ns
41- SyncMapBenchmark.getOnly ConcurrentHashMap prepopulate thrpt 5 2.658 ± 0.011 ops/ns
42-
43- SyncMapBenchmark.getOnly SyncMap none thrpt 5 2.833 ± 0.018 ops/ns
44- SyncMapBenchmark.getOnly SyncMap presize thrpt 5 2.821 ± 0.004 ops/ns
45- SyncMapBenchmark.getOnly SyncMap prepopulate thrpt 5 2.479 ± 0.021 ops/ns
46-
47- SyncMapBenchmark.getOnly SynchronizedMap none thrpt 5 0.033 ± 0.045 ops/ns
48- SyncMapBenchmark.getOnly SynchronizedMap presize thrpt 5 0.027 ± 0.004 ops/ns
49- SyncMapBenchmark.getOnly SynchronizedMap prepopulate thrpt 5 0.035 ± 0.045 ops/ns
50-
51- SyncMapBenchmark.putAndGet SyncMap none thrpt 5 0.391 ± 0.066 ops/ns
52- SyncMapBenchmark.putAndGet SyncMap presize thrpt 5 0.427 ± 0.039 ops/ns
53- SyncMapBenchmark.putAndGet SyncMap prepopulate thrpt 5 0.424 ± 0.020 ops/ns
54-
55- SyncMapBenchmark.putAndGet ConcurrentHashMap none thrpt 5 0.166 ± 0.113 ops/ns
56- SyncMapBenchmark.putAndGet ConcurrentHashMap presize thrpt 5 0.257 ± 0.030 ops/ns
57- SyncMapBenchmark.putAndGet ConcurrentHashMap prepopulate thrpt 5 0.228 ± 0.064 ops/ns
58-
59- SyncMapBenchmark.putAndGet SynchronizedMap none thrpt 5 0.012 ± 0.002 ops/ns
60- SyncMapBenchmark.putAndGet SynchronizedMap presize thrpt 5 0.012 ± 0.003 ops/ns
61- SyncMapBenchmark.putAndGet SynchronizedMap prepopulate thrpt 5 0.012 ± 0.007 ops/ns
62-
63- SyncMapBenchmark.putOnly SyncMap none thrpt 5 0.239 ± 0.025 ops/ns
64- SyncMapBenchmark.putOnly SyncMap presize thrpt 5 0.235 ± 0.044 ops/ns
65- SyncMapBenchmark.putOnly SyncMap prepopulate thrpt 5 0.457 ± 0.026 ops/ns
66-
67- SyncMapBenchmark.putOnly ConcurrentHashMap none thrpt 5 0.165 ± 0.008 ops/ns
68- SyncMapBenchmark.putOnly ConcurrentHashMap presize thrpt 5 0.336 ± 0.010 ops/ns
69- SyncMapBenchmark.putOnly ConcurrentHashMap prepopulate thrpt 5 0.297 ± 0.043 ops/ns
70-
71- SyncMapBenchmark.putOnly SynchronizedMap none thrpt 5 0.023 ± 0.004 ops/ns
72- SyncMapBenchmark.putOnly SynchronizedMap presize thrpt 5 0.023 ± 0.005 ops/ns
73- SyncMapBenchmark.putOnly SynchronizedMap prepopulate thrpt 5 0.022 ± 0.003 ops/ns
74-
75- SyncMapBenchmark.randomPutAndGet SyncMap none thrpt 5 0.192 ± 0.009 ops/ns
76- SyncMapBenchmark.randomPutAndGet SyncMap presize thrpt 5 0.203 ± 0.007 ops/ns
77- SyncMapBenchmark.randomPutAndGet SyncMap prepopulate thrpt 5 0.200 ± 0.002 ops/ns
78-
79- SyncMapBenchmark.randomPutAndGet ConcurrentHashMap none thrpt 5 0.138 ± 0.002 ops/ns
80- SyncMapBenchmark.randomPutAndGet ConcurrentHashMap presize thrpt 5 0.147 ± 0.001 ops/ns
81- SyncMapBenchmark.randomPutAndGet ConcurrentHashMap prepopulate thrpt 5 0.146 ± 0.003 ops/ns
82-
83- SyncMapBenchmark.randomPutAndGet SynchronizedMap none thrpt 5 0.017 ± 0.009 ops/ns
84- SyncMapBenchmark.randomPutAndGet SynchronizedMap presize thrpt 5 0.016 ± 0.013 ops/ns
85- SyncMapBenchmark.randomPutAndGet SynchronizedMap prepopulate thrpt 5 0.018 ± 0.004 ops/ns
33+ Benchmark (implementation) (mode) (prime) (readPercentage) (size) Mode Cnt Score Error Units
34+ SyncMapBenchmark.get_only SyncMap none false 50 100000 thrpt 5 2.411 ± 0.004 ops/ns
35+ SyncMapBenchmark.get_only SyncMap none true 50 100000 thrpt 5 2.405 ± 0.006 ops/ns
36+ SyncMapBenchmark.get_only SyncMap presize false 50 100000 thrpt 5 2.416 ± 0.006 ops/ns
37+ SyncMapBenchmark.get_only SyncMap presize true 50 100000 thrpt 5 2.398 ± 0.003 ops/ns
38+ SyncMapBenchmark.get_only SyncMap prepopulate false 50 100000 thrpt 5 1.928 ± 0.024 ops/ns
39+ SyncMapBenchmark.get_only SyncMap prepopulate true 50 100000 thrpt 5 1.948 ± 0.035 ops/ns
40+
41+ SyncMapBenchmark.get_only ConcurrentHashMap none false 50 100000 thrpt 5 1.631 ± 0.002 ops/ns
42+ SyncMapBenchmark.get_only ConcurrentHashMap none true 50 100000 thrpt 5 2.418 ± 0.002 ops/ns
43+ SyncMapBenchmark.get_only ConcurrentHashMap presize false 50 100000 thrpt 5 1.631 ± 0.004 ops/ns
44+ SyncMapBenchmark.get_only ConcurrentHashMap presize true 50 100000 thrpt 5 2.414 ± 0.001 ops/ns
45+ SyncMapBenchmark.get_only ConcurrentHashMap prepopulate false 50 100000 thrpt 5 1.593 ± 0.004 ops/ns
46+ SyncMapBenchmark.get_only ConcurrentHashMap prepopulate true 50 100000 thrpt 5 2.372 ± 0.049 ops/ns
47+
48+ SyncMapBenchmark.get_only SynchronizedMap none false 50 100000 thrpt 5 0.026 ± 0.005 ops/ns
49+ SyncMapBenchmark.get_only SynchronizedMap none true 50 100000 thrpt 5 0.027 ± 0.006 ops/ns
50+ SyncMapBenchmark.get_only SynchronizedMap presize false 50 100000 thrpt 5 0.034 ± 0.044 ops/ns
51+ SyncMapBenchmark.get_only SynchronizedMap presize true 50 100000 thrpt 5 0.031 ± 0.043 ops/ns
52+ SyncMapBenchmark.get_only SynchronizedMap prepopulate false 50 100000 thrpt 5 0.026 ± 0.007 ops/ns
53+ SyncMapBenchmark.get_only SynchronizedMap prepopulate true 50 100000 thrpt 5 0.026 ± 0.006 ops/ns
54+
55+ SyncMapBenchmark.get_put SyncMap none false 50 100000 thrpt 5 0.534 ± 0.053 ops/ns
56+ SyncMapBenchmark.get_put SyncMap none true 50 100000 thrpt 5 0.539 ± 0.064 ops/ns
57+ SyncMapBenchmark.get_put SyncMap presize false 50 100000 thrpt 5 0.532 ± 0.042 ops/ns
58+ SyncMapBenchmark.get_put SyncMap presize true 50 100000 thrpt 5 0.542 ± 0.041 ops/ns
59+ SyncMapBenchmark.get_put SyncMap prepopulate false 50 100000 thrpt 5 0.526 ± 0.047 ops/ns
60+ SyncMapBenchmark.get_put SyncMap prepopulate true 50 100000 thrpt 5 0.517 ± 0.025 ops/ns
61+
62+ SyncMapBenchmark.get_put ConcurrentHashMap none false 50 100000 thrpt 5 0.241 ± 0.002 ops/ns
63+ SyncMapBenchmark.get_put ConcurrentHashMap none true 50 100000 thrpt 5 0.257 ± 0.006 ops/ns
64+ SyncMapBenchmark.get_put ConcurrentHashMap presize false 50 100000 thrpt 5 0.329 ± 0.040 ops/ns
65+ SyncMapBenchmark.get_put ConcurrentHashMap presize true 50 100000 thrpt 5 0.318 ± 0.006 ops/ns
66+ SyncMapBenchmark.get_put ConcurrentHashMap prepopulate false 50 100000 thrpt 5 0.339 ± 0.095 ops/ns
67+ SyncMapBenchmark.get_put ConcurrentHashMap prepopulate true 50 100000 thrpt 5 0.349 ± 0.022 ops/ns
68+
69+ SyncMapBenchmark.get_put SynchronizedMap none false 50 100000 thrpt 5 0.020 ± 0.002 ops/ns
70+ SyncMapBenchmark.get_put SynchronizedMap none true 50 100000 thrpt 5 0.020 ± 0.009 ops/ns
71+ SyncMapBenchmark.get_put SynchronizedMap presize false 50 100000 thrpt 5 0.021 ± 0.003 ops/ns
72+ SyncMapBenchmark.get_put SynchronizedMap presize true 50 100000 thrpt 5 0.018 ± 0.013 ops/ns
73+ SyncMapBenchmark.get_put SynchronizedMap prepopulate false 50 100000 thrpt 5 0.019 ± 0.012 ops/ns
74+ SyncMapBenchmark.get_put SynchronizedMap prepopulate true 50 100000 thrpt 5 0.019 ± 0.014 ops/ns
75+
76+ SyncMapBenchmark.put_only SyncMap none false 50 100000 thrpt 5 0.255 ± 0.027 ops/ns
77+ SyncMapBenchmark.put_only SyncMap none true 50 100000 thrpt 5 0.242 ± 0.014 ops/ns
78+ SyncMapBenchmark.put_only SyncMap presize false 50 100000 thrpt 5 0.213 ± 0.017 ops/ns
79+ SyncMapBenchmark.put_only SyncMap presize true 50 100000 thrpt 5 0.265 ± 0.012 ops/ns
80+ SyncMapBenchmark.put_only SyncMap prepopulate false 50 100000 thrpt 5 0.239 ± 0.015 ops/ns
81+ SyncMapBenchmark.put_only SyncMap prepopulate true 50 100000 thrpt 5 0.408 ± 0.053 ops/ns
82+
83+ SyncMapBenchmark.put_only ConcurrentHashMap none false 50 100000 thrpt 5 0.206 ± 0.219 ops/ns
84+ SyncMapBenchmark.put_only ConcurrentHashMap none true 50 100000 thrpt 5 0.160 ± 0.025 ops/ns
85+ SyncMapBenchmark.put_only ConcurrentHashMap presize false 50 100000 thrpt 5 0.273 ± 0.029 ops/ns
86+ SyncMapBenchmark.put_only ConcurrentHashMap presize true 50 100000 thrpt 5 0.310 ± 0.047 ops/ns
87+ SyncMapBenchmark.put_only ConcurrentHashMap prepopulate false 50 100000 thrpt 5 0.313 ± 0.022 ops/ns
88+ SyncMapBenchmark.put_only ConcurrentHashMap prepopulate true 50 100000 thrpt 5 0.309 ± 0.027 ops/ns
89+
90+ SyncMapBenchmark.put_only SynchronizedMap none false 50 100000 thrpt 5 0.032 ± 0.040 ops/ns
91+ SyncMapBenchmark.put_only SynchronizedMap none true 50 100000 thrpt 5 0.023 ± 0.016 ops/ns
92+ SyncMapBenchmark.put_only SynchronizedMap presize false 50 100000 thrpt 5 0.025 ± 0.019 ops/ns
93+ SyncMapBenchmark.put_only SynchronizedMap presize true 50 100000 thrpt 5 0.026 ± 0.025 ops/ns
94+ SyncMapBenchmark.put_only SynchronizedMap prepopulate false 50 100000 thrpt 5 0.021 ± 0.001 ops/ns
95+ SyncMapBenchmark.put_only SynchronizedMap prepopulate true 50 100000 thrpt 5 0.022 ± 0.004 ops/ns
8696```
0 commit comments