|
1 | 1 | # Benchmarks |
2 | 2 |
|
3 | | -## Int2ObjectSyncMap |
| 3 | +## Int2ObjectBucketSyncMap |
4 | 4 |
|
5 | | -The following benchmarks are a comparison of `Int2ObjectSyncMap` vs `Int2ObjectMaps#synchronize()`. |
| 5 | +The following benchmarks are a comparison of `Int2ObjectBucketSyncMap` vs `Int2ObjectMaps#synchronize()`. |
6 | 6 |
|
7 | 7 | ### Summary |
8 | 8 |
|
9 | | -The `Int2ObjectSyncMap` has similar performance characteristics of the `Int2ObjectMaps#synchronize()`, |
| 9 | +The `Int2ObjectBucketSyncMap` has similar performance characteristics of the `Int2ObjectMaps#synchronize()`, |
10 | 10 | with an advantage in write speed. |
11 | 11 |
|
12 | 12 | The following results were recorded on an _M4 Macbook Pro_, using 8 threads and |
13 | 13 | 100,000 entries for each benchmark: |
14 | 14 |
|
15 | | -- `Int2ObjectSyncMap` **get()** speed is... |
16 | | - - 6369.2% **FASTER** than `Int2ObjectMaps#synchronize()` for an empty map. |
17 | | - - 4702.9% **FASTER** than `Int2ObjectMaps#synchronize()` for a presized empty map. |
18 | | - - 7676.2% **FASTER** than `Int2ObjectMaps#synchronize()` for a full map. |
| 15 | +- `Int2ObjectBucketSyncMap` **get()** speed is... |
| 16 | + - 50x faster than `Int2ObjectMaps#synchronize()` for an empty map. |
| 17 | + - 50x faster than `Int2ObjectMaps#synchronize()` for a presized empty map. |
| 18 | + - 75x faster than `Int2ObjectMaps#synchronize()` for a full map. |
19 | 19 |
|
20 | | -- `Int2ObjectSyncMap` **put()** speed is... |
21 | | - - 1168.2% **FASTER** than `Int2ObjectMaps#synchronize()` for an empty map. |
22 | | - - 1252.2% **FASTER** than `Int2ObjectMaps#synchronize()` for a presized empty map. |
23 | | - - 2380.9% **FASTER** than `Int2ObjectMaps#synchronize()` for a full map. |
| 20 | +- `Int2ObjectBucketSyncMap` **put()** speed is... |
| 21 | + - 15x faster than `Int2ObjectMaps#synchronize()` for an empty map. |
| 22 | + - 15x faster than `Int2ObjectMaps#synchronize()` for a presized empty map. |
| 23 | + - 25x faster than `Int2ObjectMaps#synchronize()` for a full map. |
24 | 24 |
|
25 | | -- `Int2ObjectSyncMap` **put()** then **get()** speed is... |
26 | | - - 3741.2% **FASTER** than `Int2ObjectMaps#synchronize()` for an empty map. |
27 | | - - 3644.4% **FASTER** than `Int2ObjectMaps#synchronize()` for a presized empty map. |
28 | | - - 2985.7% **FASTER** than `Int2ObjectMaps#synchronize()` for a full map. |
| 25 | +- `Int2ObjectBucketSyncMap` **put()** then **get()** speed is... |
| 26 | + - 35x faster than `Int2ObjectMaps#synchronize()` for an empty map. |
| 27 | + - 40x faster than `Int2ObjectMaps#synchronize()` for a presized empty map. |
| 28 | + - 35x faster than `Int2ObjectMaps#synchronize()` for a full map. |
29 | 29 |
|
30 | 30 | ### Results |
31 | 31 |
|
32 | 32 | ```txt |
33 | | -Benchmark (implementation) (mode) (prime) (readPercentage) (size) Mode Cnt Score Error Units |
34 | | -Int2ObjectSyncMapBenchmark.get_only SyncMap none false 50 100000 thrpt 5 1.681 ± 0.001 ops/ns |
35 | | -Int2ObjectSyncMapBenchmark.get_only SyncMap none true 50 100000 thrpt 5 1.682 ± 0.001 ops/ns |
36 | | -Int2ObjectSyncMapBenchmark.get_only SyncMap presize false 50 100000 thrpt 5 1.681 ± 0.001 ops/ns |
37 | | -Int2ObjectSyncMapBenchmark.get_only SyncMap presize true 50 100000 thrpt 5 1.681 ± 0.002 ops/ns |
38 | | -Int2ObjectSyncMapBenchmark.get_only SyncMap prepopulate false 50 100000 thrpt 5 1.640 ± 0.013 ops/ns |
39 | | -Int2ObjectSyncMapBenchmark.get_only SyncMap prepopulate true 50 100000 thrpt 5 1.633 ± 0.010 ops/ns |
| 33 | +Benchmark (implementation) (mode) (prime) (readPercentage) (size) Mode Cnt Score Error Units |
| 34 | +Int2ObjectBucketSyncMapBenchmark.get_only BucketSyncMap none false 50 100000 thrpt 5 1.680 ± 0.001 ops/ns |
| 35 | +Int2ObjectBucketSyncMapBenchmark.get_only BucketSyncMap none true 50 100000 thrpt 5 1.680 ± 0.001 ops/ns |
| 36 | +Int2ObjectBucketSyncMapBenchmark.get_only BucketSyncMap presize false 50 100000 thrpt 5 1.681 ± 0.001 ops/ns |
| 37 | +Int2ObjectBucketSyncMapBenchmark.get_only BucketSyncMap presize true 50 100000 thrpt 5 1.681 ± 0.001 ops/ns |
| 38 | +Int2ObjectBucketSyncMapBenchmark.get_only BucketSyncMap prepopulate false 50 100000 thrpt 5 1.637 ± 0.005 ops/ns |
| 39 | +Int2ObjectBucketSyncMapBenchmark.get_only BucketSyncMap prepopulate true 50 100000 thrpt 5 1.634 ± 0.002 ops/ns |
40 | 40 |
|
41 | | -Int2ObjectSyncMapBenchmark.get_only SynchronizedMap none false 50 100000 thrpt 5 0.042 ± 0.080 ops/ns |
42 | | -Int2ObjectSyncMapBenchmark.get_only SynchronizedMap none true 50 100000 thrpt 5 0.026 ± 0.002 ops/ns |
43 | | -Int2ObjectSyncMapBenchmark.get_only SynchronizedMap presize false 50 100000 thrpt 5 0.026 ± 0.006 ops/ns |
44 | | -Int2ObjectSyncMapBenchmark.get_only SynchronizedMap presize true 50 100000 thrpt 5 0.035 ± 0.055 ops/ns |
45 | | -Int2ObjectSyncMapBenchmark.get_only SynchronizedMap prepopulate false 50 100000 thrpt 5 0.022 ± 0.004 ops/ns |
46 | | -Int2ObjectSyncMapBenchmark.get_only SynchronizedMap prepopulate true 50 100000 thrpt 5 0.021 ± 0.010 ops/ns |
| 41 | +Int2ObjectBucketSyncMapBenchmark.get_only SynchronizedMap none false 50 100000 thrpt 5 0.041 ± 0.074 ops/ns |
| 42 | +Int2ObjectBucketSyncMapBenchmark.get_only SynchronizedMap none true 50 100000 thrpt 5 0.039 ± 0.068 ops/ns |
| 43 | +Int2ObjectBucketSyncMapBenchmark.get_only SynchronizedMap presize false 50 100000 thrpt 5 0.038 ± 0.077 ops/ns |
| 44 | +Int2ObjectBucketSyncMapBenchmark.get_only SynchronizedMap presize true 50 100000 thrpt 5 0.038 ± 0.075 ops/ns |
| 45 | +Int2ObjectBucketSyncMapBenchmark.get_only SynchronizedMap prepopulate false 50 100000 thrpt 5 0.023 ± 0.035 ops/ns |
| 46 | +Int2ObjectBucketSyncMapBenchmark.get_only SynchronizedMap prepopulate true 50 100000 thrpt 5 0.021 ± 0.016 ops/ns |
47 | 47 |
|
48 | | -Int2ObjectSyncMapBenchmark.get_put SyncMap none false 50 100000 thrpt 5 0.653 ± 0.329 ops/ns |
49 | | -Int2ObjectSyncMapBenchmark.get_put SyncMap none true 50 100000 thrpt 5 0.646 ± 0.096 ops/ns |
50 | | -Int2ObjectSyncMapBenchmark.get_put SyncMap presize false 50 100000 thrpt 5 0.650 ± 0.045 ops/ns |
51 | | -Int2ObjectSyncMapBenchmark.get_put SyncMap presize true 50 100000 thrpt 5 0.674 ± 0.272 ops/ns |
52 | | -Int2ObjectSyncMapBenchmark.get_put SyncMap prepopulate false 50 100000 thrpt 5 0.648 ± 0.059 ops/ns |
53 | | -Int2ObjectSyncMapBenchmark.get_put SyncMap prepopulate true 50 100000 thrpt 5 0.627 ± 0.049 ops/ns |
| 48 | +Int2ObjectBucketSyncMapBenchmark.get_put BucketSyncMap none false 50 100000 thrpt 5 0.632 ± 0.058 ops/ns |
| 49 | +Int2ObjectBucketSyncMapBenchmark.get_put BucketSyncMap none true 50 100000 thrpt 5 0.639 ± 0.061 ops/ns |
| 50 | +Int2ObjectBucketSyncMapBenchmark.get_put BucketSyncMap presize false 50 100000 thrpt 5 0.638 ± 0.031 ops/ns |
| 51 | +Int2ObjectBucketSyncMapBenchmark.get_put BucketSyncMap presize true 50 100000 thrpt 5 0.665 ± 0.278 ops/ns |
| 52 | +Int2ObjectBucketSyncMapBenchmark.get_put BucketSyncMap prepopulate false 50 100000 thrpt 5 0.645 ± 0.068 ops/ns |
| 53 | +Int2ObjectBucketSyncMapBenchmark.get_put BucketSyncMap prepopulate true 50 100000 thrpt 5 0.635 ± 0.083 ops/ns |
54 | 54 |
|
55 | | -Int2ObjectSyncMapBenchmark.get_put SynchronizedMap none false 50 100000 thrpt 5 0.017 ± 0.013 ops/ns |
56 | | -Int2ObjectSyncMapBenchmark.get_put SynchronizedMap none true 50 100000 thrpt 5 0.018 ± 0.013 ops/ns |
57 | | -Int2ObjectSyncMapBenchmark.get_put SynchronizedMap presize false 50 100000 thrpt 5 0.018 ± 0.011 ops/ns |
58 | | -Int2ObjectSyncMapBenchmark.get_put SynchronizedMap presize true 50 100000 thrpt 5 0.018 ± 0.015 ops/ns |
59 | | -Int2ObjectSyncMapBenchmark.get_put SynchronizedMap prepopulate false 50 100000 thrpt 5 0.021 ± 0.003 ops/ns |
60 | | -Int2ObjectSyncMapBenchmark.get_put SynchronizedMap prepopulate true 50 100000 thrpt 5 0.018 ± 0.015 ops/ns |
| 55 | +Int2ObjectBucketSyncMapBenchmark.get_put SynchronizedMap none false 50 100000 thrpt 5 0.018 ± 0.010 ops/ns |
| 56 | +Int2ObjectBucketSyncMapBenchmark.get_put SynchronizedMap none true 50 100000 thrpt 5 0.019 ± 0.013 ops/ns |
| 57 | +Int2ObjectBucketSyncMapBenchmark.get_put SynchronizedMap presize false 50 100000 thrpt 5 0.020 ± 0.002 ops/ns |
| 58 | +Int2ObjectBucketSyncMapBenchmark.get_put SynchronizedMap presize true 50 100000 thrpt 5 0.015 ± 0.010 ops/ns |
| 59 | +Int2ObjectBucketSyncMapBenchmark.get_put SynchronizedMap prepopulate false 50 100000 thrpt 5 0.017 ± 0.014 ops/ns |
| 60 | +Int2ObjectBucketSyncMapBenchmark.get_put SynchronizedMap prepopulate true 50 100000 thrpt 5 0.019 ± 0.010 ops/ns |
61 | 61 |
|
62 | | -Int2ObjectSyncMapBenchmark.put_only SyncMap none false 50 100000 thrpt 5 0.291 ± 0.121 ops/ns |
63 | | -Int2ObjectSyncMapBenchmark.put_only SyncMap none true 50 100000 thrpt 5 0.279 ± 0.056 ops/ns |
64 | | -Int2ObjectSyncMapBenchmark.put_only SyncMap presize false 50 100000 thrpt 5 0.304 ± 0.022 ops/ns |
65 | | -Int2ObjectSyncMapBenchmark.put_only SyncMap presize true 50 100000 thrpt 5 0.311 ± 0.080 ops/ns |
66 | | -Int2ObjectSyncMapBenchmark.put_only SyncMap prepopulate false 50 100000 thrpt 5 0.284 ± 0.065 ops/ns |
67 | | -Int2ObjectSyncMapBenchmark.put_only SyncMap prepopulate true 50 100000 thrpt 5 0.521 ± 0.028 ops/ns |
| 62 | +Int2ObjectBucketSyncMapBenchmark.put_only BucketSyncMap none false 50 100000 thrpt 5 0.303 ± 0.027 ops/ns |
| 63 | +Int2ObjectBucketSyncMapBenchmark.put_only BucketSyncMap none true 50 100000 thrpt 5 0.309 ± 0.062 ops/ns |
| 64 | +Int2ObjectBucketSyncMapBenchmark.put_only BucketSyncMap presize false 50 100000 thrpt 5 0.297 ± 0.028 ops/ns |
| 65 | +Int2ObjectBucketSyncMapBenchmark.put_only BucketSyncMap presize true 50 100000 thrpt 5 0.309 ± 0.027 ops/ns |
| 66 | +Int2ObjectBucketSyncMapBenchmark.put_only BucketSyncMap prepopulate false 50 100000 thrpt 5 0.288 ± 0.041 ops/ns |
| 67 | +Int2ObjectBucketSyncMapBenchmark.put_only BucketSyncMap prepopulate true 50 100000 thrpt 5 0.508 ± 0.036 ops/ns |
68 | 68 |
|
69 | | -Int2ObjectSyncMapBenchmark.put_only SynchronizedMap none false 50 100000 thrpt 5 0.024 ± 0.023 ops/ns |
70 | | -Int2ObjectSyncMapBenchmark.put_only SynchronizedMap none true 50 100000 thrpt 5 0.022 ± 0.007 ops/ns |
71 | | -Int2ObjectSyncMapBenchmark.put_only SynchronizedMap presize false 50 100000 thrpt 5 0.022 ± 0.002 ops/ns |
72 | | -Int2ObjectSyncMapBenchmark.put_only SynchronizedMap presize true 50 100000 thrpt 5 0.023 ± 0.005 ops/ns |
73 | | -Int2ObjectSyncMapBenchmark.put_only SynchronizedMap prepopulate false 50 100000 thrpt 5 0.022 ± 0.001 ops/ns |
74 | | -Int2ObjectSyncMapBenchmark.put_only SynchronizedMap prepopulate true 50 100000 thrpt 5 0.021 ± 0.001 ops/ns |
| 69 | +Int2ObjectBucketSyncMapBenchmark.put_only SynchronizedMap none false 50 100000 thrpt 5 0.022 ± 0.002 ops/ns |
| 70 | +Int2ObjectBucketSyncMapBenchmark.put_only SynchronizedMap none true 50 100000 thrpt 5 0.022 ± 0.008 ops/ns |
| 71 | +Int2ObjectBucketSyncMapBenchmark.put_only SynchronizedMap presize false 50 100000 thrpt 5 0.026 ± 0.026 ops/ns |
| 72 | +Int2ObjectBucketSyncMapBenchmark.put_only SynchronizedMap presize true 50 100000 thrpt 5 0.023 ± 0.011 ops/ns |
| 73 | +Int2ObjectBucketSyncMapBenchmark.put_only SynchronizedMap prepopulate false 50 100000 thrpt 5 0.026 ± 0.028 ops/ns |
| 74 | +Int2ObjectBucketSyncMapBenchmark.put_only SynchronizedMap prepopulate true 50 100000 thrpt 5 0.022 ± 0.002 ops/ns |
75 | 75 | ``` |
0 commit comments