简介:

 

优点

缺点

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. Linux 集群
  2. MHA的在线切换后的一些总结(mha方案来自网络)
  3. postfix下dovecot查收邮件连接错误
  4. Spring Security笔记:使用BCrypt算法加密存储登录密码
  5. 最短路径——Floyd算法
  6. Attributes:文本属性 和NSAttributedString
  7. Mysql date_sub函数使用
  8. JAVA 99乘法表实例
  9. 解决无法获取 GridView 隐藏列值问题
  10. 源文件名和public 类名
  11. ImageButton自定义按钮的按下效果的高效实现方法(非一般)
  12. 设计模式-中介者模式(Mediator)
  13. 牛掰啊,github+svn+FB进行项目开发
  14. AppiumDesktop录制脚本
  15. 【CF1141F2】Same Sum Blocks
  16. ubuntu下搭建一个数据化处理的开发环境
  17. POJ 3050 Hopscotch【DFS带回溯】
  18. Linux 下安装JDK和jmeter 及环境配置记录过程
  19. ThinkPHP3上传文件中遇到的问题
  20. 每日英语:How to Save Detroit

热门文章

  1. WinForm控件选择器
  2. 为什么hibernate需要事务?
  3. js按钮点击展开收起
  4. java对象数组
  5. NOI2015考试小结
  6. [DP] 堆盒子问题
  7. hdu 1028
  8. Linux---Ls命令 初级实现
  9. [itint5]两有序数组的中位数
  10. java jdk自带程序分析(内存分析/线程分析)