Git Product home page Git Product logo

java-json-benchmark's Introduction

Build Status

Benchmark of Java JSON libraries

Purpose

This project benchmarks the throughput performance of a variety of Java Json libraries using JMH. It covers the following libraries:

When available, both databinding and 'stream' (custom packing and unpacking) implementations are tested. Two different kinds of models are evaluated with payloads of 1, 10, 100 and 1000 KB size:

  • Users: uses primitive types, String, List and simple POJOs; and
  • Clients: adds arrays, enum, UUID, LocalDate

This benchmark is written to:

  • randomly generate payloads upon static loading of the JVM/benchmark; the seed is also shared across runs
  • read data from RAM
  • write data to reusable output streams (when possible); this reduces allocation pressure
  • consume all output streams; to avoid dead code elimination optimization

Not evaluated are: RAM utilization, compression, payloads > 1 MB.

Results

The benchmarks are written with JMH and for Java 8.

The results here-below were computed on April the 8th, 2018 with the following libraries and versions:

Library Version
jackson 2.9.5
genson 1.4
fastjson 1.2.47
gson 2.8.2
org.json 20090211
javax-json 1.1.2
json-io 4.10.0
flexjson 3.3
boon 0.34
json-smart 2.3
johnzon 1.1.1
logansquare 1.3.7
dsl-json 1.7.1
simplejson 1.1.1
nanojson 1.2
jodd json 4.3.0
moshi 1.5.0
tapestry 5.4.3
jsoniter 0.9.22
minimal-json 0.9.5

All graphs and sheets are available in this google doc.

Raw JMH results are available here

Users model

Uses: primitive types, String, List and simple POJOs

Deserialization performance json deserialization performance for primitive types, String, List and simple POJOs

Serialization performance json serialization performance for primitive types, String, List and simple POJOs

Clients model

Uses: primitive types, String, List and simple POJOs, arrays, enum, UUID, LocalDate

Note: fewer libraries are tested with this model due to lack of support for some of the evaluated types.

Deserialization performance json deserialization performance for primitive types, String, List and simple POJOs, arrays, enum, UUID, LocalDate

Serialization performance json serialization performance for primitive types, String, List and simple POJOs, arrays, enum, UUID, LocalDate

Benchmark configuration

Tests were run on an Amazon EC2 c5.xlarge (4 vCPU, 8 GiB RAM)

JMH info:

# JMH version: 1.20
# VM version: JDK 1.8.0_161, VM 25.161-b14
# VM invoker: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.36.amzn1.x86_64/jre/bin/java
# VM options: -XX:+AggressiveOpts -Xms2g -Xmx2g
# Warmup: 5 iterations, 1 s each
# Measurement: 10 iterations, 3 s each
# Timeout: 10 min per iteration
# Threads: 16 threads, will synchronize iterations
# Benchmark mode: Throughput, ops/time

Run

By default, running ./run ser (./run deser respectively) will run all -- stream and databind -- serialization (deserialization respectively) benchmarks with 1 KB payloads of Users.

You can also specificy which libs, apis, payload-sizes and number of iterations (and more) you want to run. For example:

./run deser --apis stream --libs genson,jackson
./run ser --apis databind,stream --libs jackson
./run deser --apis stream --libs dsljson,jackson --size 10 --datatype users

Type ./run help ser or ./run help deser to print help for those commands.

If you wish to run all benchmarks used to generate the reports above, you can run ./run-everything. This will take several hours to complete, so be patient.

Contribute

Any help to improve the existing benchmarks or write ones for other libraries is welcome.

Adding a JSON library to the benchmark requires little work and you can find numerous examples in the commit history. For instance:

Pull requests are welcome.

java-json-benchmark's People

Contributors

brcolow avatar fabienrenaud avatar javadev avatar saguinav avatar zapov avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.