jackson、fastjson、kryo、protobuf等序列化效率对比【全】

文章对比了多种序列化框架,如Kryo、Protostuff、Java自带序列化等,在综合性能、序列化效率、反序列化效率和对象大小等方面的性能。Kryo和Protostuff在速度和空间效率上表现出色,但各有其适用场景和限制。Java自带的序列化虽然方便,但速度较慢且占用空间大。
摘要由CSDN通过智能技术生成

原创不易,转载请注明出处:

https://blog.csdn.net/q258523454/article/details/129953047


 一、实测数据

大家可以先看一组,我实测的数据,只对比我们常用的4种方式:jackson、fastjson、kryo、protostuff。

        测试条件:

        CPU:  i7 2.80GHz
        内存: 16GB
        系统: 64位

        备注:
        每次插入1个 StudentObject, 每个 StudentObject中含有 100000 个 Student 对象
        600次,共6000万个对象,实测数据.

方式序列化反序列化存储大小
fastjson70 ms43 ms4.3 M
jackson68 ms135 ms7.6 M
kryo19 ms20 ms1.7 M
protoStuff14 ms30 ms2.1 M

首选: kryo,其次 protoStuff

二、序列化效率、反序列化效率、对象大小、综合性能

排名序列化效率反序列化效率对象大小综合性能
1protostuffjava-manualkryo-optkryo-manual
2protostuff-manualwoblykryo-manualprotostuff-manual
3protobuf/protostuffkryo-manualkryo-flat-preprotostuff
4kryo-manualfst-flat-preavro-genericprotobuf/protostuff
5protostuff-runtimeprotostuff-manualavro-specificjava-manual
6kryo-flat-prewobly-compactwobly-compactwobly
7fst-flat-preprotobuf/protostuffmsgpack-databindfst-flat-pre
8protobuf/protostuff-runtimeprotostuffmsgpack-manualprotostuff-runtime
9kryo-flatprotobuf/protostuff-runtimeprotobuf/protostuffprotobuf/protostuff-runtime
10java-manualprotostuff-runtimeprotobufwobly-compact
11woblyprotostuff-graphprotostuff-graphprotostuff-graph
12protostuff-graphprotobufprotostuff-manualkryo-flat-pre
13msgpack-manualprotostuff-graph-runtimeprotostuffprotostuff-graph-runtime
14protostuff-graph-runtimethrift-compactthrift-compactkryo-flat
15smile/jackson/manualkryo-flat-preprotobuf/protostuff-runtimefst-flat
16wobly-compactkryo-flatprotostuff-graph-runtimeprotobuf
17fst-flatfst-flatprotostuff-runtimekryo-opt
18kryo-optkryo-optfst-flat-prejson/fastjson/databind
19json/jackson/manualscala/sbinarywoblysmile/jackson/manual
20json/fastjson/databindjson/fastjson/databindjava-manualscala/sbinary
21msgpack-databindthriftscala/sbinarythrift-compact
22protobufjboss-marshalling-river-ct-manualkryo-flatjson/jackson/manual
23json/protostuff-manualkryo-serializerkryo-serializerjboss-marshalling-river-ct-manual
24cbor/jackson/databindfstjboss-marshalling-river-ct-manualfst
25cbor/jackson/manualsmile/jackson/manualjboss-marshalling-river-ctkryo-serializer
26smile/jackson/databindjson/jackson/manualfst-flatmsgpack-manual
27fstmsgpack-manualfstthrift
28avro-specificcbor/jackson/manualxml/exi-manualcbor/jackson/manual
29json/jackson/databindsmile/jackson+afterburner/afterburnersmile/jackson/databindmsgpack-databind
30scala/sbinarymsgpack-databindsmile/jackson/manualcbor/jackson/databind

三、总结 

Kryo——速度快,序列化后体积小;缺点是跨语言支持较复杂
Protostuff——速度快,基于protobuf;缺点是需静态编译
Protostuff-Runtime,无需静态编译,但序列化前需预先传入schema;缺点是不支持无默认构造函数的类,反序列化时需用户自己初始化序列化后的对象,其只负责将该对象进行赋值
Java——使用方便,可序列化所有类;缺点是速度慢,占空间

具体的对比可以参考这个基线图:

Results - JVM Serializer Benchmarks

 效率对比直观图:

An Introduction and Comparison of Several Common Java Serialization Frameworks - Alibaba Cloud Community

首选序列化:Kryo、Protostuff

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值