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

  • 相关阅读:
    [转] JavaScript中的字符串操作
    关于多线程学习的笔记
    [转] jquery 使用方法
    ubuntu下安装tomcat和配置mysql
    [转] 使用CodeViz生成C/C++函数调用关系图
    [转] java中的匿名内部类总结
    [转] Java中继承thread类与实现Runnable接口的区别
    字符串 指针、调试---师傅传授 栈中指针地址 与 堆中数据地址 标准写法
    maven 阿里云节点,速度快
    解决IntelliJ IDEA 创建Maven项目速度慢问题 DarchetypeCatalog
  • 原文地址:https://www.cnblogs.com/duanxz/p/4494192.html
Copyright © 2020-2023  润新知