Fury benchmarks with:
JMH config:
-f 3 -wi 5 -i 5 -t 1 -w 2s -r 2s -rf csv
OS: macos monterey
Hardware: 2.6 GHz 6-Core Intel Core i7
Fury is 3x smaller for serialized binary size at most:
furyMediaContentBytes size 336
furyStructBytes size 90
jacksonMediaContentBytes size 664
jacksonStructBytes size 278
The benchmark results here are for reference only. Jackson is a json format, fury is a binary format, which are suitable for different scenarios.
- Fury is 32.1x faster than jackson for Struct serialization
- Fury is 45x faster than jackson for Struct deserialization
- Fury is 8.8x faster than jackson for MediaContent serialization
- Fury is 11.8x faster than jackson for MediaContent deserialization
Benchmark Mode Cnt Score Error Units
JacksonBenchmark.furyDeserializeMediaContent thrpt 15 2783918.470 ± 68075.351 ops/s
JacksonBenchmark.furyDeserializeStruct thrpt 15 13686679.435 ± 1440816.885 ops/s
JacksonBenchmark.furySerializeMediaContent thrpt 15 3410893.820 ± 265913.345 ops/s
JacksonBenchmark.furySerializeStruct thrpt 15 17004519.876 ± 463107.804 ops/s
JacksonBenchmark.jacksonDeserializeMediaContent thrpt 15 235938.122 ± 23054.241 ops/s
JacksonBenchmark.jacksonDeserializeStruct thrpt 15 302600.964 ± 19586.158 ops/s
JacksonBenchmark.jacksonSerializeMediaContent thrpt 15 386182.017 ± 38637.729 ops/s
JacksonBenchmark.jacksonSerializeStruct thrpt 15 529044.347 ± 31945.826 ops/s
Compute speedup:
import pandas as pd
df = pd.read_csv("jmh-result.csv")
s = df["Score"]
s[:4].to_numpy()/s[4:].to_numpy()
Fury is 5x smaller for serialized binary size at most:
furyMediaContentBytes size 336
furyStructBytes size 90
microstream mediaContentBytes size 1527
microstream structBytes size 120
Fury is :
Benchmark Mode Cnt Score Error Units
MicrostreamBenchmark.furyDeserializeMediaContent thrpt 3 2082751.515 ± 2638613.695 ops/s
MicrostreamBenchmark.furyDeserializeStruct thrpt 3 10334292.992 ± 10542478.626 ops/s
MicrostreamBenchmark.furySerializeMediaContent thrpt 3 2898943.216 ± 946978.784 ops/s
MicrostreamBenchmark.furySerializeStruct thrpt 3 13980885.316 ± 13424528.901 ops/s
MicrostreamBenchmark.microstreamDeserializeMediaContent thrpt 3 76354.367 ± 231329.651 ops/s
MicrostreamBenchmark.microstreamSerializeMediaContent thrpt 3 66316.198 ± 729572.587 ops/s
MicrostreamBenchmark.microstreamSerializeStruct thrpt 3 233374.717 ± 732378.317 ops/s
- Fury is 7.4x faster than kryo for MediaContent serialization
- Fury is 12.4x faster than kryo for Struct serialization
- Fury is 4.8x faster than kryo for Media deserialization
- Fury is 9.8x faster than kryo for Struct deserialization
Benchmark Mode Cnt Score Error Units
KryoBenchmark.furyDeserializeMediaContent thrpt 9 2468765.648 ± 314266.100 ops/s
KryoBenchmark.furyDeserializeStruct thrpt 9 20031536.933 ± 1893069.982 ops/s
KryoBenchmark.furySerializeMediaContent thrpt 9 4041446.580 ± 402177.778 ops/s
KryoBenchmark.furySerializeStruct thrpt 9 25475238.500 ± 920132.134 ops/s
KryoBenchmark.kryoDeserializeMediaContent thrpt 9 545891.524 ± 19581.938 ops/s
KryoBenchmark.kryoDeserializeStruct thrpt 9 2496417.446 ± 76754.451 ops/s
KryoBenchmark.kryoSerializeMediaContent thrpt 9 478720.501 ± 69891.951 ops/s
KryoBenchmark.kryoSerializeStruct thrpt 9 1942266.459 ± 63863.902 ops/s
For serialized data size, fury is half of avaje:
furyMediaContentBytes size 336
furyStructBytes size 70
avaje mediaContentBytes size 586
avaje structBytes size 149
- Fury is 5.6x faster than Avaje for Media serialization
- Fury is 29x faster than Avaje for Struct serialization
- Fury is 6x faster than Avaje for MediaContent deserialization
- Fury is 24x faster than Avaje for Struct deserialization
Benchmark Mode Cnt Score Error Units
AvajeBenchmark.avajeDeserializeMediaContent thrpt 3 435874.584 ± 54036.329 ops/s
AvajeBenchmark.avajeDeserializeStruct thrpt 3 906966.403 ± 1349025.028 ops/s
AvajeBenchmark.avajeSerializeMediaContent thrpt 3 669107.596 ± 11450.125 ops/s
AvajeBenchmark.avajeSerializeStruct thrpt 3 990601.474 ± 61731.364 ops/s
AvajeBenchmark.furyDeserializeMediaContent thrpt 3 2607302.095 ± 2653734.646 ops/s
AvajeBenchmark.furyDeserializeStruct thrpt 3 21689653.040 ± 2702955.367 ops/s
AvajeBenchmark.furySerializeMediaContent thrpt 3 3775725.625 ± 273398.873 ops/s
AvajeBenchmark.furySerializeStruct thrpt 3 28858705.061 ± 4330421.563 ops/s
For serialized data size, fury is 1/5 of eclipse:
furyMediaContentBytes size 336
furyStructBytes size 70
eclipse mediaContentBytes size 1544
eclipse structBytes size 120
- Fury is 34x faster than eclipse for Media serialization
- Fury is 100x faster than eclipse for Struct serialization
- Fury is 30x faster than eclipse for MediaContent deserialization
- Fury is 52x faster than eclipse for Struct deserialization
Benchmark Mode Cnt Score Error Units
EclipseBenchmark.eclipseDeserializeMediaContent thrpt 9 131575.419 ± 9426.819 ops/s
EclipseBenchmark.eclipseDeserializeStruct thrpt 9 541499.957 ± 116080.027 ops/s
EclipseBenchmark.eclipseSerializeMediaContent thrpt 9 160571.843 ± 13393.787 ops/s
EclipseBenchmark.eclipseSerializeStruct thrpt 9 389589.337 ± 54602.631 ops/s
EclipseBenchmark.furyDeserializeMediaContent thrpt 9 3929205.878 ± 100267.218 ops/s
EclipseBenchmark.furyDeserializeStruct thrpt 9 28012278.714 ± 582665.499 ops/s
EclipseBenchmark.furySerializeMediaContent thrpt 9 5401529.165 ± 325428.659 ops/s
EclipseBenchmark.furySerializeStruct thrpt 9 39210806.902 ± 1638993.713 ops/s