référence fastjson


Dans fastjson-1.2.11, les performances de sérialisation ont été considérablement améliorées, et les performances de désérialisation ont également été améliorées, nous avons donc effectué un test de comparaison des performances avec d'autres bibliothèques de sérialisation.

Le scénario de test

adopte un test reconnu par divers auteurs de bibliothèques de sérialisation, de https://github.com/eihay/jvm-serializers, car le test officiel n'a pas encore utilisé la dernière version. fastjson, j'ai donc bifurqué et modifié pour utiliser la dernière API, le code est icihttps://github.com/wenshao/jvm-serializers/tree/fastjson-1.2.11

Exécutez le test

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

Structure des classes

scène d'eihay, il y a trois classes, la structure des classes est la suivante

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;
}

Voir le code détaillé ici :

Test data

Le scénario de test est media.1.cks, et le json correspondant est le suivant

{"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 , si le mode BeanToArray est activé, le json correspondant est :

[[[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]]

Participer aux tests des versions de chaque bibliothèque

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

Résultats des tests

Hôte Alibaba Cloud Singapour , configuration normale, 1 CPU 1024M de mémoire

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