XSON序列化框架性能对比测试 - xsonorg/xson GitHub Wiki
1. 测试所选框架介绍
框架名称 版本
JDK 1.6
XSON 1.0.1(feature-encode)
FastJson 1.1.41
Hessian 4.0.33
JBoss 4.2.2.GA
Kryo 2.24.0
说明:
1.以上选择的框架都是基于二进制序列化框架,除了FastJson,但是FastJson的性能是非常优秀的,甚至
超过一些二进制框架。这里将其列出之也仅作二进制序列化和JSON文本序列化间的参考。
2.另外也有一些框架同样也非常优秀。比如:protobuf,avro,thrift,但由于需要额外的结构数据支持
未列入本次测试当中,感兴趣的朋友可以自行测试。
2. 测试说明
2.1 硬件信息:
<b>Test Platform</b>
OS:Windows XP
JVM:Sun Microsystems Inc. 1.6.0_22
CPU:x86 Family 6 Model 15 Stepping 13, GenuineIntel os-arch:x86
Cores (incl HT):2
2.2 测试方法:(参考自https://github.com/eishay/jvm-serializers)
<!--[if !supportLists]-->1、 <!--[endif]-->在正式测试之前,将测试用例运行10次对JVM进行预热。
<!--[if !supportLists]-->2、 <!--[endif]-->对测试用例的每个方法,运行2000次,取平均值。
2.3 测试基准:
ser: 将对象序列化成byte数组的时间
deser: 将byte数组反序列化成对象的时间
total: 将对象序列化成byte数组再反序列化为对象的总时间
size: 序列化后的数组大小
write: 序列化是否支持
read: 反序列化是否支持
2.3 说明
2.3.1 FastJson测试项中的size为字符串长度
2.3.2 write和read的取值 OK:支持 ERROR:不支持 UNKNOW:未知。对于某种测试情况,如果不支持序列化,那么反序列化为UNKNOW
3. 测试结果说明
3.1.结果说明
JDK(unshared)
JDK(shared)
XSON
XSON(ext) 使用类名的关键字映射
FastJson
Hessian
Hessian-deflat deflat压缩
JBoss
Kryo-ref reference选项开启
Kryo
kryo-reg-ref 类注册开启,reference选项开启
kryo-reg 类注册开启
4. 总结
1.对象类型和对象结构支持情况
XSON,JBoss,Kryo,Hessian
2.序列化和反序列化速度
kryo,XSON,Hessian,JBoss
3.序列化的体积
Kryo,XSON,Hessian,JBoss
4.使用方式
都比较简单,但是XSON更简洁:)
5.复杂对象的测试
本次测试未进行此项对比,感兴趣的朋友可以自行测试。
6.改进计划
XSON后期将在字符编码、基本类型体积优化和大对象特殊处理方面做进一步优化。
附录.测试结果列表
1.
采用jvm-serializers中的media.1.cks数据源
------------------------------------------------------------------------------
data[media.1.cks] ser deser total size write read
JDK(unshared) 69945 179749 249695 1119 OK OK
JDK(shared) 50139 141452 191591 1119 OK OK
XSON 31348 41513 72862 512 OK OK
XSON(ext) 16186 10926 27112 245 OK OK
FastJson 43025 41664 84689 486 OK OK
Hessian 46846 52808 99654 665 OK OK
Hessian-deflat 349217 141464 490681 373 OK OK
JBoss 204521 213587 418109 1152 OK OK
Kryo-ref 29103 29227 58330 320 OK OK
Kryo 10039 10498 20537 332 OK OK
kryo-reg-ref 13816 11385 25201 200 OK OK
kryo-reg 6909 7265 14175 212 OK OK
2.
同上,采用media.2.cks数据源
------------------------------------------------------------------------------
data[media.2.cks] ser deser total size write read
JDK(unshared) 72522 180323 252846 1182 OK OK
JDK(shared) 53541 142679 196220 1182 OK OK
XSON 31892 41961 73853 566 OK OK
XSON(ext) 18213 12083 30296 299 OK OK
FastJson 43733 38677 82411 555 OK OK
Hessian 46444 55491 101936 702 OK OK
Hessian-deflat 170215 90579 260795 402 OK OK
JBoss 242831 248432 491263 1225 OK OK
Kryo-ref 32841 31887 64729 373 OK OK
Kryo 10913 11595 22509 369 OK OK
kryo-reg-ref 14427 13552 27979 252 OK OK
kryo-reg 7753 8591 16345 248 OK OK
3.
同上用data-stream/media.3.cks数据源
------------------------------------------------------------------------------
data[media.3.1.cks] ser deser total size write read
JDK(unshared) 87754 198242 285996 2162 OK OK
JDK(shared) 66467 152523 218991 2162 OK OK
XSON 53815 61260 115075 1556 OK OK
XSON(ext) 32872 22269 55141 1289 OK OK
FastJson 51019 60536 111556 1827 OK OK
Hessian 60650 81475 142126 2013 OK OK
Hessian-deflat 233179 136082 369262 487 OK OK
JBoss 207602 222201 429803 2195 OK OK
Kryo-ref 38747 37030 75777 1377 OK OK
Kryo 20560 17454 38015 1691 OK OK
kryo-reg-ref 21518 17838 39356 1257 OK OK
kryo-reg 17095 14380 31475 1571 OK OK
4.
同上,采用media.4.cks数据源
------------------------------------------------------------------------------
data[media.4.cks] ser deser total size write read
JDK(unshared) 63334 180563 243897 980 OK OK
JDK(shared) 44509 139261 183771 980 OK OK
XSON 29169 39563 68733 371 OK OK
XSON(ext) 14247 9235 23482 104 OK OK
FastJson 41009 37000 78009 318 OK OK
Hessian 47284 56667 103951 495 OK OK
Hessian-deflat 351433 125167 476600 305 OK OK
JBoss 198862 208120 406983 1008 OK OK
Kryo-ref 28939 30025 58964 185 OK OK
Kryo 9136 9827 18963 173 OK OK
kryo-reg-ref 11476 11019 22496 65 OK OK
kryo-reg 5625 6521 12146 53 OK OK
5.
POJO中使用255个int类型字段
------------------------------------------------------------------------------
data[Multi Field 255 Ds] ser deser total size write read
JDK(unshared) 72505 294493 366998 2771 OK OK
JDK(shared) 60583 270792 331376 2771 OK OK
XSON 58146 37162 95309 570 OK OK
XSON(ext) 43709 22033 65743 519 OK OK
FastJson 122758 141813 264572 2590 OK OK
Hessian 44469 92728 137198 1693 OK OK
Hessian-deflat 461387 153822 615210 993 OK OK
JBoss 573162 209652 782815 3144 OK OK
Kryo-ref 15750 16109 31860 448 OK OK
Kryo 9102 10016 19119 447 OK OK
kryo-reg-ref 9615 10845 20461 448 OK OK
kryo-reg 9353 10262 19616 447 OK OK
6.
这里使用了XSON所支持的所有对象类型
------------------------------------------------------------------------------
data[多类型支持] ser deser total size write read
JDK(unshared) 0 0 0 0 ERROR UNKNOW
JDK(shared) 0 0 0 0 ERROR UNKNOW
XSON 99060 148520 247581 917 OK OK
XSON(ext) 58050 63524 121574 800 OK OK
FastJson 145633 89447 235081 1252 OK OK
Hessian 0 0 0 0 ERROR UNKNOW
Hessian-deflat 0 0 0 0 ERROR UNKNOW
JBoss 765159 807891 1573051 4122 OK OK
Kryo-ref 75403 0 75403 0 OK ERROR
Kryo 30106 0 30106 0 OK ERROR
kryo-reg-ref 0 0 0 0 ERROR UNKNOW
kryo-reg 0 0 0 0 ERROR UNKNOW
7.
在一个数组中既有子类,又有父类
------------------------------------------------------------------------------
data[父类子类数组] ser deser total size write read
JDK(unshared) 0 0 0 0 ERROR UNKNOW
JDK(shared) 0 0 0 0 ERROR UNKNOW
XSON 18161 15711 33872 110 OK OK
XSON(ext) 6294 3702 9997 29 OK OK
FastJson 24617 29198 53815 64 OK OK
Hessian 0 0 0 0 ERROR UNKNOW
Hessian-deflat 0 0 0 0 ERROR UNKNOW
JBoss 74830 78720 153550 266 OK OK
Kryo-ref 14133 17328 31462 103 OK OK
Kryo 5155 6252 11408 101 OK OK
kryo-reg-ref 0 0 0 0 ERROR UNKNOW
kryo-reg 0 0 0 0 ERROR UNKNOW
8.
同上
------------------------------------------------------------------------------
data[父类子类集合] ser deser total size write read
JDK(unshared) 0 0 0 0 ERROR UNKNOW
JDK(shared) 0 0 0 0 ERROR UNKNOW
XSON 15750 20278 36029 130 OK OK
XSON(ext) 6158 4496 10655 31 OK OK
FastJson 26755 30366 57121 64 OK OK
Hessian 0 0 0 0 ERROR UNKNOW
Hessian-deflat 0 0 0 0 ERROR UNKNOW
JBoss 87253 83433 170686 250 OK OK
Kryo-ref 22028 23779 45808 103 OK OK
Kryo 5191 5316 10508 101 OK OK
kryo-reg-ref 5487 4435 9923 14 OK OK
kryo-reg 3525 3772 7297 12 OK OK
9.
A->B,B->A,A->A
------------------------------------------------------------------------------
data[循环引用] ser deser total size write read
JDK(unshared) 0 0 0 0 ERROR UNKNOW
JDK(shared) 0 0 0 0 ERROR UNKNOW
XSON 21841 21859 43700 180 OK OK
XSON(ext) 12686 7195 19882 114 OK OK
FastJson 37967 45260 83228 305 OK OK
Hessian 0 0 0 0 ERROR UNKNOW
Hessian-deflat 0 0 0 0 ERROR UNKNOW
JBoss 217637 181835 399473 410 OK OK
Kryo-ref 27152 25845 52997 183 OK OK
Kryo 0 0 0 0 ERROR UNKNOW
kryo-reg-ref 12086 11140 23226 100 OK OK
kryo-reg 0 0 0 0 ERROR UNKNOW
10.
------------------------------------------------------------------------------
data[大对象] ser deser total size write read
JDK(unshared) 63767881 7888991 71656872 4194331 OK OK
JDK(shared) 30730163 6869030 37599193 4194331 OK OK
XSON 27394543 6054121 33448664 4194311 OK OK
XSON(ext) 22648968 5806324 28455292 4194311 OK OK
FastJson 67561939 104171620 171733559 5592410 OK OK
Hessian 25781489 340022824 365804313 4197895 OK OK
Hessian-deflat 86885345 348947143 435832488 18610 OK OK
JBoss 13621284 6420928 20042212 4194341 OK OK
Kryo-ref 105032344 8473703 113506047 4194309 OK OK
Kryo 42527751 5910528 48438279 4194308 OK OK
kryo-reg-ref 0 0 0 0 ERROR UNKNOW
kryo-reg 0 0 0 0 ERROR UNKNOW