{"id":30558329,"url":"https://github.com/chaokunyang/fory-benchmarks","last_synced_at":"2025-08-28T08:26:49.443Z","repository":{"id":186345814,"uuid":"675034200","full_name":"chaokunyang/fory-benchmarks","owner":"chaokunyang","description":"Serialization Benchmarks for apache fory(previously fury) with other libraries","archived":false,"fork":false,"pushed_at":"2025-08-24T12:51:49.000Z","size":215,"stargazers_count":5,"open_issues_count":1,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-24T18:23:11.582Z","etag":null,"topics":["benchmark","binary","java","json","protobuf","protocol","serialization"],"latest_commit_sha":null,"homepage":"https://github.com/apache/fory","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chaokunyang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-08-05T14:59:17.000Z","updated_at":"2025-08-24T12:54:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"08998557-4e0f-40de-9a53-de6f60faea41","html_url":"https://github.com/chaokunyang/fory-benchmarks","commit_stats":null,"previous_names":["chaokunyang/fury-benchmarks","chaokunyang/fory-benchmarks"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/chaokunyang/fory-benchmarks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chaokunyang%2Ffory-benchmarks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chaokunyang%2Ffory-benchmarks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chaokunyang%2Ffory-benchmarks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chaokunyang%2Ffory-benchmarks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chaokunyang","download_url":"https://codeload.github.com/chaokunyang/fory-benchmarks/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chaokunyang%2Ffory-benchmarks/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272469407,"owners_count":24939879,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-28T02:00:10.768Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["benchmark","binary","java","json","protobuf","protocol","serialization"],"created_at":"2025-08-28T08:26:45.613Z","updated_at":"2025-08-28T08:26:49.428Z","avatar_url":"https://github.com/chaokunyang.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Fury Benchmarks\n\nFury benchmarks with:\n- [x] [jackson databind](https://github.com/FasterXML/jackson-databind)\n- [x] [Microstream](https://github.com/real-logic/simple-binary-encoding)\n\n# Benchmark Setup\nJMH config:\n`-f 3 -wi 5 -i 5 -t 1 -w 2s -r 2s -rf csv`\nOS: macos monterey\nHardware: 2.6 GHz 6-Core Intel Core i7\n\n# Benchmark Results\n## Fury vs Jackson\nFury is 3x smaller for serialized binary size at most:\n```java\nfuryMediaContentBytes size 336\nfuryStructBytes size 90\njacksonMediaContentBytes size 664\njacksonStructBytes size 278\n```\n\nThe benchmark results here are for reference only. Jackson is a json format, fury is a binary format, which are suitable for different scenarios.\n- Fury is 32.1x faster than jackson for Struct serialization\n- Fury is 45x faster than jackson for Struct deserialization\n- Fury is 8.8x faster than jackson for MediaContent serialization\n- Fury is 11.8x faster than jackson for MediaContent deserialization\n\n```java\nBenchmark                                         Mode  Cnt         Score         Error  Units\nJacksonBenchmark.furyDeserializeMediaContent     thrpt   15   2783918.470 ±   68075.351  ops/s\nJacksonBenchmark.furyDeserializeStruct           thrpt   15  13686679.435 ± 1440816.885  ops/s\nJacksonBenchmark.furySerializeMediaContent       thrpt   15   3410893.820 ±  265913.345  ops/s\nJacksonBenchmark.furySerializeStruct             thrpt   15  17004519.876 ±  463107.804  ops/s\nJacksonBenchmark.jacksonDeserializeMediaContent  thrpt   15    235938.122 ±   23054.241  ops/s\nJacksonBenchmark.jacksonDeserializeStruct        thrpt   15    302600.964 ±   19586.158  ops/s\nJacksonBenchmark.jacksonSerializeMediaContent    thrpt   15    386182.017 ±   38637.729  ops/s\nJacksonBenchmark.jacksonSerializeStruct          thrpt   15    529044.347 ±   31945.826  ops/s\n```\nCompute speedup:\n```python\nimport pandas as pd\ndf = pd.read_csv(\"jmh-result.csv\")\ns = df[\"Score\"]\ns[:4].to_numpy()/s[4:].to_numpy()\n```\n\n## Fury vs Cbor\nFury is 1.7 times compression ratio compared to cbor:\n\n```\nfuryMediaContentBytes size 332\nfuryStructBytes size 70\njacksonCborMediaContentBytes size 526\njacksonCborStructBytes size 124\n```\n\nBenchmark:\n- Fury is 14.9x faster than cbor for Struct serialization\n- Fury is 20.1x faster than cbor for Struct deserialization\n- Fury is 3.4x faster than cbor for MediaContent serialization\n- Fury is 9.4x faster than cbor for MediaContent deserialization\n\n```\nBenchmark                                             Mode  Cnt         Score         Error  Units\nJacksonCborBenchmark.furyDeserializeMediaContent     thrpt   15   2318684.260 ±  418410.419  ops/s\nJacksonCborBenchmark.furyDeserializeStruct           thrpt   15  23473857.456 ± 1079190.475  ops/s\nJacksonCborBenchmark.furySerializeMediaContent       thrpt   15   2871536.155 ±  499539.691  ops/s\nJacksonCborBenchmark.furySerializeStruct             thrpt   15  25798974.819 ± 5661244.865  ops/s\nJacksonCborBenchmark.jacksonDeserializeMediaContent  thrpt   15    155926.917 ±   29828.950  ops/s\nJacksonCborBenchmark.jacksonDeserializeStruct        thrpt   15   1165682.751 ±   89508.634  ops/s\nJacksonCborBenchmark.jacksonSerializeMediaContent    thrpt   15    841823.098 ±   38414.841  ops/s\nJacksonCborBenchmark.jacksonSerializeStruct          thrpt   15   2740102.390 ±  181705.982  ops/s\n```\n\n\n## Fury vs Microstream\nFury is 5x smaller for serialized binary size at most:\n```java\nfuryMediaContentBytes size 336\nfuryStructBytes size 90\nmicrostream mediaContentBytes size 1527\nmicrostream structBytes size 120\n```\nFury is much faster:\n```java\nBenchmark                                                 Mode  Cnt         Score          Error  Units\nMicrostreamBenchmark.furyDeserializeMediaContent         thrpt    3   2082751.515 ±  2638613.695  ops/s\nMicrostreamBenchmark.furyDeserializeStruct               thrpt    3  10334292.992 ± 10542478.626  ops/s\nMicrostreamBenchmark.furySerializeMediaContent           thrpt    3   2898943.216 ±   946978.784  ops/s\nMicrostreamBenchmark.furySerializeStruct                 thrpt    3  13980885.316 ± 13424528.901  ops/s\nMicrostreamBenchmark.microstreamDeserializeMediaContent  thrpt    3     76354.367 ±   231329.651  ops/s\nMicrostreamBenchmark.microstreamSerializeMediaContent    thrpt    3     66316.198 ±   729572.587  ops/s\nMicrostreamBenchmark.microstreamSerializeStruct          thrpt    3    233374.717 ±   732378.317  ops/s\n```\n\n## Fury vs Kryo in JDK17:\n- Fury is 7.4x faster than kryo for MediaContent serialization\n- Fury is 12.4x faster than kryo for Struct serialization\n- Fury is 4.8x faster than kryo for Media deserialization\n- Fury is 9.8x faster than kryo for Struct deserialization\n```java\nBenchmark                                   Mode  Cnt         Score         Error  Units\nKryoBenchmark.furyDeserializeMediaContent  thrpt    9   2468765.648 ±  314266.100  ops/s\nKryoBenchmark.furyDeserializeStruct        thrpt    9  20031536.933 ± 1893069.982  ops/s\nKryoBenchmark.furySerializeMediaContent    thrpt    9   4041446.580 ±  402177.778  ops/s\nKryoBenchmark.furySerializeStruct          thrpt    9  25475238.500 ±  920132.134  ops/s\nKryoBenchmark.kryoDeserializeMediaContent  thrpt    9    545891.524 ±   19581.938  ops/s\nKryoBenchmark.kryoDeserializeStruct        thrpt    9   2496417.446 ±   76754.451  ops/s\nKryoBenchmark.kryoSerializeMediaContent    thrpt    9    478720.501 ±   69891.951  ops/s\nKryoBenchmark.kryoSerializeStruct          thrpt    9   1942266.459 ±   63863.902  ops/s\n```\n\u003cp align=\"center\"\u003e\n\u003cimg width=\"45%\" alt=\"\" src=\"images/bench_struct_tps.png\"\u003e\n\u003cimg width=\"45%\" alt=\"\" src=\"images/bench_media_content_tps.png\"\u003e\n\u003c/p\u003e\n\n## Fury vs Avaje\nFor serialized data size, fury is half of avaje:\n```java\nfuryMediaContentBytes size 336\nfuryStructBytes size 70\navaje mediaContentBytes size 586\navaje structBytes size 149\n```\n- Fury is 5.6x faster than Avaje for Media serialization\n- Fury is 29x faster than Avaje for Struct serialization\n- Fury is 6x faster than Avaje for MediaContent deserialization\n- Fury is 24x faster than Avaje for Struct deserialization\n```java\nBenchmark                                     Mode  Cnt         Score         Error  Units\nAvajeBenchmark.avajeDeserializeMediaContent  thrpt    3    435874.584 ±   54036.329  ops/s\nAvajeBenchmark.avajeDeserializeStruct        thrpt    3    906966.403 ± 1349025.028  ops/s\nAvajeBenchmark.avajeSerializeMediaContent    thrpt    3    669107.596 ±   11450.125  ops/s\nAvajeBenchmark.avajeSerializeStruct          thrpt    3    990601.474 ±   61731.364  ops/s\nAvajeBenchmark.furyDeserializeMediaContent   thrpt    3   2607302.095 ± 2653734.646  ops/s\nAvajeBenchmark.furyDeserializeStruct         thrpt    3  21689653.040 ± 2702955.367  ops/s\nAvajeBenchmark.furySerializeMediaContent     thrpt    3   3775725.625 ±  273398.873  ops/s\nAvajeBenchmark.furySerializeStruct           thrpt    3  28858705.061 ± 4330421.563  ops/s\n```\n\u003cp align=\"center\"\u003e\n\u003cimg width=\"45%\" alt=\"\" src=\"images/avaje/bench_struct_tps.png\"\u003e\n\u003cimg width=\"45%\" alt=\"\" src=\"images/avaje/bench_media_content_tps.png\"\u003e\n\u003c/p\u003e\n\n## Fury vs Eclipse\nFor serialized data size, fury is 1/5 of eclipse:\n```java\nfuryMediaContentBytes size 336\nfuryStructBytes size 70\neclipse mediaContentBytes size 1544\neclipse structBytes size 120\n```\n- Fury is 34x faster than eclipse for Media serialization\n- Fury is 100x faster than eclipse for Struct serialization\n- Fury is 30x faster than eclipse for MediaContent deserialization\n- Fury is 52x faster than eclipse for Struct deserialization\n```java\nBenchmark                                         Mode  Cnt         Score         Error  Units\nEclipseBenchmark.eclipseDeserializeMediaContent  thrpt    9    131575.419 ±    9426.819  ops/s\nEclipseBenchmark.eclipseDeserializeStruct        thrpt    9    541499.957 ±  116080.027  ops/s\nEclipseBenchmark.eclipseSerializeMediaContent    thrpt    9    160571.843 ±   13393.787  ops/s\nEclipseBenchmark.eclipseSerializeStruct          thrpt    9    389589.337 ±   54602.631  ops/s\nEclipseBenchmark.furyDeserializeMediaContent     thrpt    9   3929205.878 ±  100267.218  ops/s\nEclipseBenchmark.furyDeserializeStruct           thrpt    9  28012278.714 ±  582665.499  ops/s\nEclipseBenchmark.furySerializeMediaContent       thrpt    9   5401529.165 ±  325428.659  ops/s\nEclipseBenchmark.furySerializeStruct             thrpt    9  39210806.902 ± 1638993.713  ops/s\n```\n\u003cp align=\"center\"\u003e\n\u003cimg width=\"45%\" alt=\"\" src=\"images/eclipse/bench_struct_tps.png\"\u003e\n\u003cimg width=\"45%\" alt=\"\" src=\"images/eclipse/bench_media_content_tps.png\"\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchaokunyang%2Ffory-benchmarks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchaokunyang%2Ffory-benchmarks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchaokunyang%2Ffory-benchmarks/lists"}