Skip to content

Commit 69eebde

Browse files
improve(syncmap): rework node access and bulk operation locking
1 parent b6caac8 commit 69eebde

File tree

5 files changed

+998
-1239
lines changed

5 files changed

+998
-1239
lines changed

collections/benchmarks.md

Lines changed: 48 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -5,52 +5,52 @@
55
The following benchmarks are a comparison of `SyncMap` vs `Collections#synchronizedMap()` vs `ConcurrentHashMap`.
66

77
```txt
8-
Benchmark (implementation) (mode) (size) Mode Cnt Score Error Units
9-
SyncMapBenchmark.getOnly ConcurrentHashMap none 100000 thrpt 5 29.332 ± 0.053 ops/ms
10-
SyncMapBenchmark.getOnly ConcurrentHashMap presize 100000 thrpt 5 29.289 ± 0.015 ops/ms
11-
SyncMapBenchmark.getOnly ConcurrentHashMap prepopulate 100000 thrpt 5 26.329 ± 0.124 ops/ms
12-
13-
SyncMapBenchmark.getOnly SyncMap none 100000 thrpt 5 28.158 ± 0.222 ops/ms
14-
SyncMapBenchmark.getOnly SyncMap presize 100000 thrpt 5 27.957 ± 0.252 ops/ms
15-
SyncMapBenchmark.getOnly SyncMap prepopulate 100000 thrpt 5 23.932 ± 0.333 ops/ms
16-
17-
SyncMapBenchmark.getOnly SynchronizedMap none 100000 thrpt 5 0.272 ± 0.012 ops/ms
18-
SyncMapBenchmark.getOnly SynchronizedMap presize 100000 thrpt 5 0.275 ± 0.030 ops/ms
19-
SyncMapBenchmark.getOnly SynchronizedMap prepopulate 100000 thrpt 5 0.294 ± 0.227 ops/ms
20-
21-
SyncMapBenchmark.putAndGet SyncMap none 100000 thrpt 5 3.244 ± 0.057 ops/ms
22-
SyncMapBenchmark.putAndGet SyncMap presize 100000 thrpt 5 3.503 ± 0.281 ops/ms
23-
SyncMapBenchmark.putAndGet SyncMap prepopulate 100000 thrpt 5 3.512 ± 0.079 ops/ms
24-
25-
SyncMapBenchmark.putAndGet ConcurrentHashMap none 100000 thrpt 5 1.511 ± 0.024 ops/ms
26-
SyncMapBenchmark.putAndGet ConcurrentHashMap presize 100000 thrpt 5 2.343 ± 0.336 ops/ms
27-
SyncMapBenchmark.putAndGet ConcurrentHashMap prepopulate 100000 thrpt 5 2.438 ± 0.424 ops/ms
28-
29-
SyncMapBenchmark.putAndGet SynchronizedMap none 100000 thrpt 5 0.123 ± 0.022 ops/ms
30-
SyncMapBenchmark.putAndGet SynchronizedMap presize 100000 thrpt 5 0.122 ± 0.014 ops/ms
31-
SyncMapBenchmark.putAndGet SynchronizedMap prepopulate 100000 thrpt 5 0.137 ± 0.180 ops/ms
32-
33-
SyncMapBenchmark.putOnly SyncMap none 100000 thrpt 5 2.023 ± 0.286 ops/ms
34-
SyncMapBenchmark.putOnly SyncMap presize 100000 thrpt 5 2.036 ± 0.602 ops/ms
35-
SyncMapBenchmark.putOnly SyncMap prepopulate 100000 thrpt 5 4.163 ± 0.137 ops/ms
36-
37-
SyncMapBenchmark.putOnly ConcurrentHashMap none 100000 thrpt 5 1.663 ± 0.088 ops/ms
38-
SyncMapBenchmark.putOnly ConcurrentHashMap presize 100000 thrpt 5 3.116 ± 0.592 ops/ms
39-
SyncMapBenchmark.putOnly ConcurrentHashMap prepopulate 100000 thrpt 5 3.060 ± 0.251 ops/ms
40-
41-
SyncMapBenchmark.putOnly SynchronizedMap none 100000 thrpt 5 0.277 ± 0.294 ops/ms
42-
SyncMapBenchmark.putOnly SynchronizedMap presize 100000 thrpt 5 0.228 ± 0.036 ops/ms
43-
SyncMapBenchmark.putOnly SynchronizedMap prepopulate 100000 thrpt 5 0.271 ± 0.253 ops/ms
44-
45-
SyncMapBenchmark.randomPutAndGet SyncMap none 100000 thrpt 5 1.560 ± 0.009 ops/ms
46-
SyncMapBenchmark.randomPutAndGet SyncMap presize 100000 thrpt 5 1.514 ± 0.037 ops/ms
47-
SyncMapBenchmark.randomPutAndGet SyncMap prepopulate 100000 thrpt 5 1.480 ± 0.034 ops/ms
48-
49-
SyncMapBenchmark.randomPutAndGet ConcurrentHashMap none 100000 thrpt 5 1.278 ± 0.056 ops/ms
50-
SyncMapBenchmark.randomPutAndGet ConcurrentHashMap presize 100000 thrpt 5 1.430 ± 0.204 ops/ms
51-
SyncMapBenchmark.randomPutAndGet ConcurrentHashMap prepopulate 100000 thrpt 5 1.437 ± 0.134 ops/ms
52-
53-
SyncMapBenchmark.randomPutAndGet SynchronizedMap none 100000 thrpt 5 0.176 ± 0.116 ops/ms
54-
SyncMapBenchmark.randomPutAndGet SynchronizedMap presize 100000 thrpt 5 0.165 ± 0.142 ops/ms
55-
SyncMapBenchmark.randomPutAndGet SynchronizedMap prepopulate 100000 thrpt 5 0.188 ± 0.006 ops/ms
8+
Benchmark (implementation) (mode) Mode Cnt Score Error Units
9+
SyncMapBenchmark.getOnly ConcurrentHashMap none thrpt 5 2.950 ± 0.024 ops/ns
10+
SyncMapBenchmark.getOnly ConcurrentHashMap presize thrpt 5 2.949 ± 0.003 ops/ns
11+
SyncMapBenchmark.getOnly ConcurrentHashMap prepopulate thrpt 5 2.664 ± 0.033 ops/ns
12+
13+
SyncMapBenchmark.getOnly SyncMap none thrpt 5 2.840 ± 0.016 ops/ns
14+
SyncMapBenchmark.getOnly SyncMap presize thrpt 5 2.827 ± 0.004 ops/ns
15+
SyncMapBenchmark.getOnly SyncMap prepopulate thrpt 5 2.481 ± 0.041 ops/ns
16+
17+
SyncMapBenchmark.getOnly SynchronizedMap none thrpt 5 0.027 ± 0.003 ops/ns
18+
SyncMapBenchmark.getOnly SynchronizedMap presize thrpt 5 0.028 ± 0.001 ops/ns
19+
SyncMapBenchmark.getOnly SynchronizedMap prepopulate thrpt 5 0.034 ± 0.049 ops/ns
20+
21+
SyncMapBenchmark.putAndGet SyncMap none thrpt 5 0.426 ± 0.029 ops/ns
22+
SyncMapBenchmark.putAndGet SyncMap presize thrpt 5 0.440 ± 0.075 ops/ns
23+
SyncMapBenchmark.putAndGet SyncMap prepopulate thrpt 5 0.428 ± 0.077 ops/ns
24+
25+
SyncMapBenchmark.putAndGet ConcurrentHashMap none thrpt 5 0.156 ± 0.006 ops/ns
26+
SyncMapBenchmark.putAndGet ConcurrentHashMap presize thrpt 5 0.231 ± 0.058 ops/ns
27+
SyncMapBenchmark.putAndGet ConcurrentHashMap prepopulate thrpt 5 0.239 ± 0.021 ops/ns
28+
29+
SyncMapBenchmark.putAndGet SynchronizedMap none thrpt 5 0.013 ± 0.008 ops/ns
30+
SyncMapBenchmark.putAndGet SynchronizedMap presize thrpt 5 0.012 ± 0.002 ops/ns
31+
SyncMapBenchmark.putAndGet SynchronizedMap prepopulate thrpt 5 0.012 ± 0.003 ops/ns
32+
33+
SyncMapBenchmark.putOnly SyncMap none thrpt 5 0.202 ± 0.027 ops/ns
34+
SyncMapBenchmark.putOnly SyncMap presize thrpt 5 0.249 ± 0.047 ops/ns
35+
SyncMapBenchmark.putOnly SyncMap prepopulate thrpt 5 0.437 ± 0.014 ops/ns
36+
37+
SyncMapBenchmark.putOnly ConcurrentHashMap none thrpt 5 0.164 ± 0.003 ops/ns
38+
SyncMapBenchmark.putOnly ConcurrentHashMap presize thrpt 5 0.324 ± 0.040 ops/ns
39+
SyncMapBenchmark.putOnly ConcurrentHashMap prepopulate thrpt 5 0.264 ± 0.029 ops/ns
40+
41+
SyncMapBenchmark.putOnly SynchronizedMap none thrpt 5 0.023 ± 0.004 ops/ns
42+
SyncMapBenchmark.putOnly SynchronizedMap presize thrpt 5 0.026 ± 0.027 ops/ns
43+
SyncMapBenchmark.putOnly SynchronizedMap prepopulate thrpt 5 0.027 ± 0.029 ops/ns
44+
45+
SyncMapBenchmark.randomPutAndGet SyncMap none thrpt 5 0.193 ± 0.002 ops/ns
46+
SyncMapBenchmark.randomPutAndGet SyncMap presize thrpt 5 0.205 ± 0.010 ops/ns
47+
SyncMapBenchmark.randomPutAndGet SyncMap prepopulate thrpt 5 0.202 ± 0.001 ops/ns
48+
49+
SyncMapBenchmark.randomPutAndGet ConcurrentHashMap none thrpt 5 0.138 ± 0.003 ops/ns
50+
SyncMapBenchmark.randomPutAndGet ConcurrentHashMap presize thrpt 5 0.146 ± 0.003 ops/ns
51+
SyncMapBenchmark.randomPutAndGet ConcurrentHashMap prepopulate thrpt 5 0.145 ± 0.002 ops/ns
52+
53+
SyncMapBenchmark.randomPutAndGet SynchronizedMap none thrpt 5 0.018 ± 0.003 ops/ns
54+
SyncMapBenchmark.randomPutAndGet SynchronizedMap presize thrpt 5 0.019 ± 0.009 ops/ns
55+
SyncMapBenchmark.randomPutAndGet SynchronizedMap prepopulate thrpt 5 0.017 ± 0.012 ops/ns
5656
```

collections/src/jmh/java/space/vectrix/collections/SyncMapBenchmark.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public void setup() {
8585
}
8686

8787
if(presized && (this.map instanceof final SyncMap<Integer, Integer> sync)) {
88-
sync.amend();
88+
sync.promote();
8989
}
9090
}
9191

collections/src/main/java/space/vectrix/collections/Atomics.java

Lines changed: 0 additions & 237 deletions
This file was deleted.

0 commit comments

Comments
 (0)