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

序列化框架性能对比(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

时间: 2024-10-26 19:05:13

[java]序列化框架性能对比(kryo、hessian、java、protostuff)的相关文章

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

简介:   优点 缺点 Kryo 速度快,序列化后体积小 跨语言支持较复杂 Hessian 默认支持跨语言 较慢 Protostuff 速度快,基于protobuf 需静态编译 Protostuff-Runtime 无需静态编译,但序列化前需预先传入schema 不支持无默认构造函数的类,反序列化时需用户自己初始化序列化后的对象,其只负责将该对象进行赋值 Java 使用方便,可序列化所有类 速度慢,占空间                   测试环境: 硬件信息: 16 Intel(R) Xeo

Java序列化框架性能比较

博客: http://colobu.com jvm-serializers提供了一个很好的比较各种Java序列化的的测试套件. 它罗列了各种序列化框架, 可以自动生成测试报告. 我在AWS c3.xlarge机器上进行了测试,一下是测试报告与解析. 关键的测试数据的统计代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 public double runWithTimeMeasurement(

高性能Java序列化框架Fse发布

目录 高性能Java序列化框架Fse发布 使用场景 使用说明 开源地址 高性能Java序列化框架Fse发布 使用场景 将Java对象序列化为二进制数据进行保存,以及二进制数据反向序列化为Java对象,在很多场景中都有应用.比如将对象序列化后离线存储至其他介质,或者存储于Redis这样的缓存之中. 目前常见的有几种框架可以支撑,比如 Hession ,Kryo,Protobuf,JDK原生等.有一些框架需要提前编写元数据配置文件以支撑跨语言序列化能力,比如 Protobuf .不过如果团队的技术栈

2017年的golang、python、php、c++、c、java、Nodejs性能对比[续]

2017年的golang.python.php.c++.c.java.Nodejs性能对比[续] 最近忙,这个话题放了几天,今天来个续集.   上篇传送门: 2017年的golang.python.php.c++.c.java.Nodejs性能对比(golang python php c++ java Nodejs Performance)   好了,上回的某些事有些人有异议,今天也回应下. 1.有人说python性能没那么Low? 这个我用pypy 2.7确认了下,确实没那么差, 如果用num

java数据库连接池性能对比

这个测试的目的是验证当前常用数据库连接池的性能. testcase Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.preparedStatement("select 1"); ResultSet rs = stmt.executeQuery(); while (rs.next()) { } rs.close(); stmt.close(); conn.close(); test c

2017年的golang、python、php、c++、c、java、Nodejs性能对比(golang python php c++ java Nodejs Performance)

2017年的golang.python.php.c++.c.java.Nodejs性能对比 本人在PHP/C++/Go/Py时,突发奇想,想把最近主流的编程语言性能作个简单的比较, 至于怎么比,还是不得不用神奇的斐波那契算法.可能是比较常用或好玩吧. 好了,talk is cheap, show me your code!  打开Mac,点开Clion开始Coding吧! 1.怎么第一是Go呢,因为我个人最近正在用,感觉很不错 package main import "fmt" fun

Java MVC框架性能比较

- by zvane 现在各种MVC框架很多,各框架的优缺点网络上也有很多的参考文章,但介绍各框架性能方面差别的文章却不多,本人在项目开发中,感觉到采用了struts2框架的项目访问速度,明显不如原来采用了struts1框架的项目快,带着这些疑惑,我对各类MVC框架的做了一个简单的性能分析比较,其结果应该说是基本符合预期的,可供大家参考. 测试环境:CPU:酷睿2 T5750,内存:DDR2-667 2G,Web容器:Tomcat6.0,最大线程数设置为1000,操作系统:WinXP-sp3 测

6种Java序列化框架

下面介绍几种常用的Java序列化技术,耗时比较,单位纳秒 0.002511:com.my.tools.serialize.KryoRegisterSerialize 0.007207:com.my.tools.serialize.FSTSerialize 0.00811:com.my.tools.serialize.KryoSerialize 0.010137:com.my.tools.serialize.GsonSerialize 0.012367:com.my.tools.serialize

java io读取性能对比

背景 从最早bio的只支持阻塞的bio(同步阻塞) 到默认阻塞支持非阻塞nio(同步非阻塞+同步阻塞)(此时加入mmap类) 再到aio(异步非阻塞) 虽然这些api改变了调用模式,但真正执行效率上是否也会有所不同,对此进行了此次java io的性能测试 首先从github上找到了2个项目,然后自己也实现了一个性能对比的实现,以便熟悉各种api 项目1: https://github.com/stateIs0/io.benchmark https://www.jianshu.com/u/4342