在fastjson-1.2.11中,序列化性能有了很大提升,反序列化性能也有所提升,所以做一次和其他序列化庫的性能對(duì)比測試。
采用各個(gè)序列化庫作者都比較認(rèn)可的一個(gè)測試,來自 https://github.com/eishay/jvm-serializers,由于官方的測試還沒采用最新版本的fastjson,所以我fork修改使用最新的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
eishay的場景,有三個(gè)類,類結(jié)構(gòu)如下
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;
}
詳細(xì)代碼看這里:
測試的場景是media.1.cks,對(duì)應(yīng)的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模式,對(duì)應(yīng)的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.11
jackson-2.7.0
protobuf-java-2.3.0.jar
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
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
更多建議: