zoukankan      html  css  js  c++  java
  • [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

  • 相关阅读:
    easyui 后台系统引入富文本编辑器的使用
    easyui datagrid 表格动态隐藏部分列的展示
    java ArrayList源码分析(转载)
    propertychange方法
    CSS margin-top 属性
    easyui-textbox input输入框的一种取值方式
    jquery next()方法
    jquery children()方法
    一段简单的表格样式
    常用的排序算法的时间复杂度和空间复杂度
  • 原文地址:https://www.cnblogs.com/lonelywolfmoutain/p/5563985.html
Copyright © 2011-2022 走看看