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 :
- https://github.com/wenshao/jvm-serializers/blob/fastjson-1.2.11/tpc/src/data/media/MediaContent.java
- https : / /github.com/wenshao/jvm-serializers/blob/fastjson-1.2.11/tpc/src/data/media/Media.java
- https://github.com/wenshao/jvm-serializers/blob / fastjson-1.2.11/tpc/src/data/media/Image.java
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