序列化框架性能对比(kryo、hessian、java、protostuff)

简介:

 

优点

缺点

Kryo

速度快,序列化后体积小

跨语言支持较复杂

Hessian

默认支持跨语言

较慢

Protostuff

速度快,基于protobuf

需静态编译

Protostuff-Runtime

无需静态编译,但序列化前需预先传入schema

不支持无默认构造函数的类,反序列化时需用户自己初始化序列化后的对象,其只负责将该对象进行赋值

Java

使用方便,可序列化所有类

速度慢,占空间

     
     
     

测试环境:

硬件信息:

16 Intel(R) Xeon(R) CPU E5620 @2.40GHz

Red Hat Enterprise Linux Server release 5.4 (Tikanga)

java:  "1.6.0_27" Java HotSpot(TM) 64-Bit Server VM (build 20.2-b06, mixed mode)

JVM options: java -Xmx256m –server

测试数据:(见附件)

ArrayList.class

MediaContent.class

Media.class

Image.class

测试方法:(参考自https://github.com/eishay/jvm-serializers

<!--[if !supportLists]-->1、  <!--[endif]-->在正式测试之前,将测试用例运行10次对JVM进行预热。

<!--[if !supportLists]-->2、  <!--[endif]-->对测试用例的每个方法,运行2000次,取平均值。

<!--[if !supportLists]-->3、  <!--[endif]-->每次测试用例运行500次,取最优结果

测试基准:

ser:           创建一个对象,并将其序列化成byte数组的时间

deser:       将byte数组反序列化成对象的时间

total:        创建一个对象,将其序列化成byte数组再反序列化为对象的总时间

size:          序列化后的数组大小

size+dfl:   序列化后用level6级别的zlib进行压缩后的大小

测试工具:

序列化工具

序列化方式

kryo

使用kryo默认的序列化方式fieldSerializer,

对需要序列化的对象采取默认的操作。开启reference,关闭register

protostuff

使用静态编译生成的Schema进行序列化

protostuff-runtime

使用protostuff-runtime框架生成Schema进行序列化

   

测试结果:

时间:

大小:

总结:

Kryo在类注册且reference关闭的情况下,序列化速度和大小明显 优于hessian和java,接近于protostuff。开启reference后将序列化速度将明显变慢,但仍旧优于hessian。

相关知识:

类注册:将需要序列化的类注册到kryo中,可以提高序列化与反序列化的速度。

Reference:开启这个选项后,相同的对象将被序列化为同一个byte[],默认关闭,如果要支持循环引用,则必须开启

稳定性测试:

测试用例(见附件)

循环引用:Cyclic.java

序列化方式

无默认构造函数

循环引用

对象为null

是否需要预先知道对象所属的类

大对象(4M)

Kryo

支持

需将reference选项打开

支持

不需要,关闭register

支持

Java

支持

支持

支持

不需要

支持

Protostuff

支持

支持

支持

不需要

支持

Protostuff

-runtime

不支持

支持

支持

需要

支持

Hessian

支持

支持

支持

不需要

支持

via http://x-rip.iteye.com/blog/1555293

最新文章

  1. TinyWeb v1.0 正式完成第一个Release版本(功能基于 libuv 跨平台库)
  2. 第一个APP:IOS做简单运算的计算器
  3. poj 3150 Cellular Automaton
  4. php过滤参数特殊字符防注入
  5. 奇妙的算法之LCS妙解
  6. JavaScript中的数组
  7. html5 audio play()方法部分ios机不能播放声音
  8. Xamarin介绍
  9. tcp并发服务器(c20w)
  10. 通过案例学习 Secret - 每天5分钟玩转 Docker 容器技术(110)
  11. svn conflict 冲突解决
  12. 第一次java作业
  13. (百度)centos7上安装apache指南
  14. curl 命令模拟 HTTP GET/POST 请求
  15. python2.7 环境配置
  16. [Erlang36]kerl轻松管理安装各种OTP版本
  17. 项目中遇到的问题, ftp等
  18. OLT配置说明
  19. Ryu控制器学习
  20. 苏州Uber优步司机奖励政策(12月28日到1月3日)

热门文章

  1. 重定位shell
  2. Web 仪表盘
  3. csdn第三名
  4. log4j 应用
  5. ueditor上传图片到七牛云存储(form api,java)
  6. 使用Jmeter测试MySQL性能——(2)多客户端配置
  7. Android Bitmap OOM处理
  8. VIM正则表达式。
  9. 用Python对excel文件的简单操作
  10. HDU 4686 矩阵快速幂 Arc of Dream