框架名称 版本 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.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.1.结果说明 JDK(unshared) JDK(shared) XSON XSON(ext) 使用类名的关键字映射 FastJson Hessian Hessian-deflat deflat压缩 JBoss Kryo-ref reference选项开启 Kryo kryo-reg-ref 类注册开启,reference选项开启 kryo-reg 类注册开启
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