Java — Benchmark Results
Generated: 2026-07-11T10:57:31.992153
Published local snapshot (not regenerated by GitHub Actions). Numbers may differ if you re-run benchmarks on another machine.
Serializer inventory and caveats: Java overview. Methods: Analysis Methodology. Metric definitions & importance tiers: Metrics catalog.
Pivot tables
Multi-way leaderboards emphasize high-importance metrics (configurable via metrics.multi_way in master config). Harness modes (CSV StringOrStream): bytes mode = in-memory buffer API; stream mode = write/read through a stream-like path. These names are not payload sizes. In each table, rows are sorted by serializer name; bold marks the semantic best value in that column (lowest time; highest ops/s). Ties are all bolded. Latency tables are in microseconds (µs). Batch fixtures show as Type · N instances (from DataTypeInstanceCount; e.g. Message · 100 instances).
Summary
Default multi-serializer view shows high-importance metrics only (METRICS.md). Rows are sorted by serializer name. Bold marks the semantic best value in each column (lowest latency / size; highest ops/s). Pairwise / version A/B reports use the full metric set. Latency cells are µs (analysis storage remains ns).
| serializer | Median total (µs) | Median ser (µs) | Median deser (µs) | Ops/s (from mean) | Median size (B) | Samples | Fidelity |
|---|---|---|---|---|---|---|---|
| avro:1.12.0 | 111 | 31.6 | 79.3 | 75.4K | 9.02K | 1733 | 1.00 |
| bson:5.3.1 | 190 | 95.5 | 94.5 | 66.5K | 20.5K | 1693 | 1.00 |
| dsl-json:2.0.2 | 148 | 70.9 | 75.2 | 93.4K | 19.5K | 1671 | 1.00 |
| fastjson2:2.0.57 | 96.1 | 43.4 | 51.9 | 58.5K | 19.5K | 1707 | 1.00 |
| fory:1.3.0 | 42.6 | 20.7 | 21.7 | 121K | 9.65K | 1676 | 1.00 |
| gson:2.12.1 | 373 | 219 | 151 | 41.3K | 19.5K | 1702 | 1.00 |
| hessian:4.0.66 | 90 | 38 | 51.9 | 78.9K | 9.75K | 1698 | 1.00 |
| ion:2.18.3 | 399 | 104 | 294 | 27.9K | 19K | 1695 | 1.00 |
| jackson:2.18.3 | 237 | 75.2 | 162 | 55.6K | 19.5K | 1708 | 1.00 |
| jackson-cbor:2.18.3 | 92.2 | 30.2 | 61.5 | 82.3K | 13.6K | 1713 | 1.00 |
| jackson-smile:2.18.3 | 73.2 | 27.7 | 45.3 | 97.9K | 11.3K | 1692 | 1.00 |
| java-serialization:21.0.11 | 191 | 78 | 111 | 27.7K | 13K | 1734 | 1.00 |
| jsoniter:0.9.23 | 81.4 | 33.2 | 47.3 | 86.9K | 16.7K | 1720 | 1.00 |
| kryo:5.6.2 | 88.4 | 49.6 | 38 | 44.8K | 9.25K | 1677 | 1.00 |
| moshi:1.15.2 | 263 | 97.6 | 165 | 72.7K | 19.5K | 1812 | 1.00 |
| msgpack:0.9.8 | 140 | 58.7 | 81.2 | 73.9K | 13.3K | 1711 | 1.00 |
| protobuf:4.28.3 | 94.8 | 34.3 | 60.4 | 68.3K | 10.1K | 1651 | 1.00 |
| protostuff:1.8.0 | 63.3 | 31.4 | 31.6 | 98K | 10.4K | 1649 | 1.00 |
Total Time
| serializer | bytes mode/mean | bytes mode/median | stream mode/mean | stream mode/median |
|---|---|---|---|---|
| avro:1.12.0 | 32.2 | 32.8 | 21.9 | 21.8 |
| bson:5.3.1 | 49.1 | 44.1 | 25.2 | 24.9 |
| dsl-json:2.0.2 | 50.3 | 48.2 | 38.3 | 35.6 |
| fastjson2:2.0.57 | 31 | 31 | 30.9 | 30.7 |
| fory:1.3.0 | 13.9 | 13.9 | 11 | 10.7 |
| gson:2.12.1 | 56.5 | 52.8 | 68.7 | 66.4 |
| hessian:4.0.66 | 21.8 | 22.5 | 12.3 | 12.1 |
| ion:2.18.3 | 148 | 130 | 69.6 | 68.5 |
| jackson:2.18.3 | 98.4 | 94 | 70.2 | 68 |
| jackson-cbor:2.18.3 | 32.4 | 33 | 16.5 | 16.5 |
| jackson-smile:2.18.3 | 33.6 | 36.4 | 13.9 | 14.6 |
| java-serialization:21.0.11 | 68.3 | 61.2 | 54.6 | 54.2 |
| jsoniter:0.9.23 | 16.4 | 16.3 | 7.7 | 6.87 |
| kryo:5.6.2 | 21.8 | 21.6 | 13.1 | 13 |
| moshi:1.15.2 | 54.5 | 50.6 | 31.7 | 26 |
| msgpack:0.9.8 | 45.5 | 35.4 | 23.6 | 22.8 |
| protobuf:4.28.3 | 7.86 | 7.58 | 10.1 | 9.89 |
| protostuff:1.8.0 | 7.18 | 7.18 | 8.45 | 8.34 |
Ops/Sec
| serializer | Document · 1 instance | Document · 100 instances | Event · 1 instance | Event · 100 instances | Message · 1 instance | Message · 100 instances | Strings · 1 instance | Strings · 100 instances | Telemetry · 1 instance | Telemetry · 100 instances |
|---|---|---|---|---|---|---|---|---|---|---|
| avro:1.12.0 | 73K | 3.1K | 370K | 7.2K | 31K | 3K | 150K | 3.5K | 130K | 6.2K |
| bson:5.3.1 | 73K | 1.8K | 240K | 3.8K | 20K | 2K | 270K | 2.5K | 86K | 3K |
| dsl-json:2.0.2 | 51K | 2.6K | 310K | 6.3K | 20K | 2.4K | 560K | 6.3K | 32K | 1.8K |
| fastjson2:2.0.57 | 34K | 5.4K | 150K | 8.7K | 32K | 4.6K | 250K | 5.2K | 51K | 3K |
| fory:1.3.0 | 140K | 8.1K | 320K | 22K | 72K | 11K | 180K | 7.1K | 320K | 33K |
| gson:2.12.1 | 40K | 1.3K | 170K | 2.5K | 18K | 1.7K | 200K | 2.5K | 40K | 0.82K |
| hessian:4.0.66 | 100K | 2.7K | 200K | 13K | 46K | 4.1K | 250K | 4.3K | 130K | 6.8K |
| ion:2.18.3 | 21K | 1.1K | 110K | 2.3K | 6.8K | 1.6K | 110K | 2.1K | 16K | 0.66K |
| jackson:2.18.3 | 41K | 2.6K | 210K | 4.2K | 10K | 2.1K | 120K | 3.2K | 47K | 1K |
| jackson-cbor:2.18.3 | 36K | 3.6K | 240K | 7K | 31K | 5.3K | 350K | 5.1K | 87K | 7.5K |
| jackson-smile:2.18.3 | 39K | 4.6K | 270K | 9.7K | 30K | 10K | 400K | 5.6K | 110K | 7.5K |
| java-serialization:21.0.11 | 24K | 2.2K | 76K | 3.4K | 15K | 2.4K | 74K | 1.7K | 55K | 4K |
| jsoniter:0.9.23 | 130K | 6.2K | 260K | 12K | 61K | 4.1K | 130K | 4.4K | 110K | 5.6K |
| kryo:5.6.2 | 48K | 3.7K | 97K | 11K | 46K | 5.4K | 90K | 3.1K | 87K | 10K |
| moshi:1.15.2 | 47K | 2.1K | 280K | 5K | 18K | 2.8K | 320K | 3K | 38K | 0.65K |
| msgpack:0.9.8 | 32K | 2.4K | 270K | 4.8K | 22K | 3.6K | 330K | 3.6K | 53K | 5.4K |
| protobuf:4.28.3 | 68K | 4.8K | 210K | 8.1K | 130K | 15K | 150K | 4K | 110K | 8.2K |
| protostuff:1.8.0 | 75K | 6.3K | 560K | 14K | 140K | 7.2K | 130K | 5.4K | 130K | 9.3K |
Latency distributions
Each figure pairs mean bars (left: ser / deser mean µs, linear from 0) with split violins (right: full sample density, linear from 0). Top 5 serializers by mean total time per fixture (display only; tables list all). Provenance (fixture, CSV path, modes, n) is printed on each image.
Document · 1 instance

Document · 100 instances

Event · 1 instance

Event · 100 instances

Message · 1 instance

Message · 100 instances

Strings · 1 instance

Strings · 100 instances

Telemetry · 1 instance

Telemetry · 100 instances

Regenerate
Published snapshots are produced locally (not by GitHub Actions). After running benchmarks (each run creates a timestamped YYYY-MM-DD-HHMMSS.csv):
analyze-benchmarks # all languages
analyze-benchmarks -l java # this language only
That refreshes this language's results tables and latency distributions under docs/analysis/plots/violin/. The hub Benchmark Results is a static index and is not rewritten. Commit the updated results.md / plot paths as needed.
Run configuration (important)
Show host, seed, serializers, and source CSV
Key fields from the run sidecar (*.configs.json, or legacy *.environment.json). Full metric definitions: Metrics catalog. Optional blocks (dataset, serializers) appear only when captured.
- Source CSV:
/home/leo/PycharmProjects/GLD/seriailizer-benchmark/logs/java/2026-07-10-172131.csv - run=2026-07-10-172131
- language=java
- os=Linux 6.8.0-124-generic
- cpu=12th Gen Intel(R) Core(TM) i7-12800H (20 threads)
- ram=31.0 GiB
- runtimes: python=3.14.0, node=24.15.0, dotnet=8.0.422
- git=fa77247
- seed=42
- warmup_reps=1
- serializers=18
- metrics_profile=multi_way
- Fixtures (config): message, document, telemetry, strings, event
- Serializers (from CSV):
avro@ 1.12.0bson@ 5.3.1dsl-json@ 2.0.2fastjson2@ 2.0.57fory@ 1.3.0gson@ 2.12.1hessian@ 4.0.66ion@ 2.18.3jackson@ 2.18.3jackson-cbor@ 2.18.3jackson-smile@ 2.18.3java-serialization@ 21.0.11jsoniter@ 0.9.23kryo@ 5.6.2moshi@ 1.15.2msgpack@ 0.9.8protobuf@ 4.28.3protostuff@ 1.8.0