fastjson 벤치마크


fastjson-1.2.11에서는 직렬화 성능이 크게 향상되었고, 역직렬화 성능도 향상되어 다른 직렬화 라이브러리와 성능 비교 테스트를 진행했습니다.

테스트 시나리오

는 공식 테스트에서 아직 최신 버전을 사용하지 않았기 때문에 https://github.com/eihay/jvm-serializers의 다양한 직렬화 라이브러리 작성자가 인정한 테스트를 채택했습니다. fastjson이므로 최신 API를 사용하도록 포크하고 수정했습니다. 코드는 여기에 있습니다https://github.com/wenshao/jvm-serializers/tree/fastjson-1.2.11

테스트 실행

git clone https://github.com/wenshao/jvm-serializers.git
cd jvm-serializers/tpc
make
./run-bench.sh json/jackson+afterburner/databind,json/fastjson/databind,json/fastjson_array/databind,protobuf,json/jackson/databind,msgpack/databind

클래스 구조

eihay의 씬에는 3개의 클래스가 있는데, 클래스 구조는 다음과 같습니다

class MediaContent {
    public Media media;
    public Image[] images;
}
class Media implements java.io.Serializable {
    public enum Player { JAVA, FLASH }
    public String       uri;
    public String       title;     // Can be unset.
    public int          width;
    public int          height;
    public String       format;
    public long         duration;
    public long         size;
    public boolean      hasBitrate;
    public List<String> persons;
    public Player       player;
    public String       copyright; // Can be unset.
}

class Image {
    public enum Size { SMALL, LARGE }
    public String uri;
    public String title; // Can be null
    public int    width;
    public int    height;
    public Size   size;
}

여기에서 자세한 코드를 확인하세요:

테스트 데이터

테스트 시나리오는 media.1.cks이며, 해당 json은 다음과 같습니다

{"images":[{"height":768,"size":"LARGE","title":"Javaone Keynote","uri":"http://javaone.com/keynote_large.jpg","width":1024},{"height":240,"size":"SMALL","title":"Javaone Keynote","uri":"http://javaone.com/keynote_small.jpg","width":320}],"media":{"bitrate":262144,"duration":18000000,"format":"video/mpg4","height":480,"persons":["Bill Gates","Steve Jobs"],"player":"JAVA","size":58982400,"title":"Javaone Keynote","uri":"http://javaone.com/keynote.mpg","width":640}}

fastjson, BeanToArray 모드가 활성화된 경우 해당 json은 다음과 같습니다.

[[[768,1,"Javaone Keynote","http://javaone.com/keynote_large.jpg",1024],[240,0,"Javaone Keynote","http://javaone.com/keynote_small.jpg",320]],[262144,null,18000000,"video/mpg4",480,["Bill Gates","Steve Jobs"],0,58982400,"Javaone Keynote","http://javaone.com/keynote.mpg",640]]

각 라이브러리 버전 테스트에 참여하세요

fastjson-1.2.11jackson-2.7.0protobuf-java-2.3.0.jar

테스트 결과

Alibaba 클라우드 싱가포르 호스트 , 일반 구성, 1 CPU 1024M 메모리

java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)
                                   create     ser   deser   total   size  +dfl
json/fastjson_array/databind          123    1289    1567    2856    281   163
json/fastjson/databind                120    2019    2610    4629    486   262
json/jackson+afterburner/databind     118    2142    3147    5289    485   261
json/jackson/databind                 124    2914    4411    7326    485   261
msgpack/databind                      122    1525    2180    3705    233   146
protobuf                              244    2297    1296    3593    239   149

Raspberry Pi 3

java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) Client VM (build 25.65-b01, mixed mode)
                                   create     ser   deser   total   size  +dfl
json/fastjson_array/databind          961   18162   19106   37268    281   163
json/fastjson/databind                976   31240   29890   61129    486   262
json/jackson+afterburner/databind     975   24539   34337   58876    485   261
json/jackson/databind                 979   28238   49380   77618    485   261
msgpack/databind                     1027   18768   26617   45385    233   146
protobuf                             2626   26095   12538   38633    239   149