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

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

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

    简介:   优点 缺点 Kryo 速度快,序列化后体积小 跨语言支持较复杂 Hessian 默认支持跨语言 较慢 Protostuff 速度快,基于protobuf 需静态编译 Protostuff- ...

  2. java序列化框架(protobuf、thrift、kryo、fst、fastjson、Jackson、gson、hessian)性能对比

     我们为什么要序列化 举个栗子:下雨天我们要打伞,但是之后我们要把伞折叠起来,方便我们存放.那么运用到我们java中道理是一样的,我们要将数据分解成字节流,以便存储在文件中或在网络上传输,这叫序列 ...

  3. 一些常用Java序列化框架的比较

    概念 序列化:将Java对象转化为字节数组 反序列化:将字节数组转化为Java对象 在RPC应用中,进行跨进程远程调用的时候,需要使用特定的序列化技术,需要对进行网络传输的对象进行序列化和反序列化. ...

  4. Java MVC框架性能比较

    Java MVC框架性能比较 - by zvane 现在各种MVC框架很多,各框架的优缺点网络上也有很多的参考文章,但介绍各框架性能方面差别的文章却不多,本人在项目开发中,感觉到采用了struts2框 ...

  5. lua、groovy嵌入到java中的性能对比(转)

    lua和groovy都是可以嵌入到java中的脚本语言.lua以高性能著称,与C/C++在游戏开放中有较多使用,groovy是一个基于Java虚拟机(JVM)的敏捷动态语言,在jvm下有着不错的性能. ...

  6. 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时,突发奇想,想把最近主流的编程语言性能作个简单的比较, 至于怎么比,还是不 ...

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

    2017年的golang.python.php.c++.c.java.Nodejs性能对比[续] 最近忙,这个话题放了几天,今天来个续集.   上篇传送门: 2017年的golang.python.p ...

  8. Java序列化框架性能比較

    博客: http://colobu.com jvm-serializers提供了一个非常好的比較各种Java序列化的的測试套件. 它罗列了各种序列化框架. 能够自己主动生成測试报告. 我在AWS c3 ...

  9. jackson、fastjson、kryo、protostuff等序列化工具性能对比

    简介 实际项目中,我们经常需要使用序列化工具来存储和传输对象.目前用得比较多的序列化工具有:jackson.fastjson.kryo.protostuff.fst 等,本文将简单对比这几款工具序列化 ...

随机推荐

  1. M2: XAML Controls

    本小节介绍如何在界面上添加简单的XAML Controls, 本例中我们用到了Grid, TextBlock, Button, 和StackPanel控件.XAML自身所有的控件都声明在Windows ...

  2. iOS开发资源:几个类似Path 2.0侧滑菜单的效果实现

    IIViewDeckController/ViewDeck 类似 Path 2.0 的视图左右滑动的效果,可向左或者向右顺滑的滑动.支持ARC和non-ARC,默认ARC. https://githu ...

  3. LeetCode Minimum Path Sum (简单DP)

    题意: 给一个n*m的矩阵,每次可以往下或右走,经过的格子中的数字之和就是答案了,答案最小为多少? 思路: 比较水,只是各种空间利用率而已. 如果可以在原空间上作修改. class Solution ...

  4. Nexus仓库构建

    1 . 私服简介 私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件.有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库:否则,私服请求外部 ...

  5. vs2012 + cocos2d-x 2.1.5 + win7开发环境搭建步骤

    先要让vs具备cocos2d-x项目的模板,以此可以创建新的项目(1-5步),然后把相关的源码库文件和动态连接库都拷贝到自己的项目中,以使项目可以正常运行(6-7步). 1,打开vs,设置TestCp ...

  6. 【转】Java中如何遍历Map对

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  7. sass中mixin常用的CSS3

    圆角border-radius @mixin rounded($radius){ -webkit-border-radius: $radius; -moz-border-radius: $radius ...

  8. 面向过程部分 Java 和 C++ 的区别

    前言 Java 和 C++ 在面向过程部分区别并不大,但还是有的,本文罗列了这些区别. 在 Java 中: 1. 数据类型的范围和机器无关 2. 加上前缀 0b 可以表示二进制数,如 0b1001 就 ...

  9. localhost 和 127.0.0.1 的区别

    很多人会接触到这个ip地址127.0.0.1.也许你会问127.0.0.1是什么地址?其实127.0.0.1是一个回送地址,指本地机,一般用来测试使用.大家常用来ping 127.0.0.1来看本地i ...

  10. keil uvision看厌了么?试试Sublime Text吧!

    之前用 Sublime Text(以下简称 ST )配置了 C/C++ 开发环境,感觉相当不错,作为编辑器的 ST,编辑代码的功能当然是相当棒的,美中不足的是目前只能编译单个文件,但是用来做些小练习也 ...