`
lxm3033
  • 浏览: 18790 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

各种java序列化工具性能对比

阅读更多

各种java序列化工具性能对比

看到一个很不错的工具http://github.com/eishay/jvm-serializers/,可以用它来评测各种流行的java序列化反序列化工具,使用上也很简单。想试试该工具的,下载源码后参考起README操作即可。而我更关心的是,是各种工具的性能对比,以作选择的一个衡量标准,也就是http://github.com/eishay/jvm-serializers/wiki的图示和数据。本文也就简单转摘其图示,图示中的java-manual指的是根据对象(数据)格式手工操作(当然是最快的,但不具有通用性),java-buildin-in就是内置的序列化方式(ObjectOutputStream、ObjectInputStream),其他工具的使用版本可以查看其wiki。

1、Total Time (“total”)

创建一个对象,将其序列化成一个字节数组,然后再反序列化成一个对象。

2、Serialization Time (“ser”)

创建一个对象,将其序列化成一个字节数组。

3、Deserialization Time (“deser+deep”)

相比于序列化,反序列化更耗时。为了更公平的比较,jvm-serializers在反序列化测试时访问了反序列化得到的对象的所有字段(也就是deep的含义),因为部分工具反序列化时“偷懒”而没有做足工作。

4、Serialized Size (“size”)

序列化数据的大小,这个大小会依赖于使用的数据。

5、Serialization Compressed Size (“size+dfl”)

使用java内置的DEFLATE(zlib)压缩的序列化数据的大小。

6、Object Creation Time (“create”)

对象创建耗时很短(平均100纳秒)所以通常的比较没什么意义。不过,不同工具创建的对象在表现上会有不同。有的工具只是创建普通的java类,你可以直接访问其字段,而有的使用get/set方法,有的使用builder模式。

分析这些对比,java内置的序列化方式性能很差(这才催生了各种序列化工具)。在这些工具中,protostuff表现极为出色,盖过了名头响亮的protobuff和thrift。通用格式中,json要比xml强不少,而不同工具对同样格式的性能表现也有差别,这也给了选择工具的一个指导。另一个值得一提的是bson,尽管jvm-serializers没有包含它,相信性能上应该不错。也可以参考jvm-serializers已有工具评测代码的实现,添加比如处理bson、php等格式的序列化工具的评测。

分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA上百实例源码以及开源项目源代码

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包---java 源码 大量 实例

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包4

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包3

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包2

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java 编程入门思考

    12.2.8 通过序列化进行深层复制 12.2.9 使克隆具有更大的深度 12.2.10 为什么有这个奇怪的设计 12.3 克隆的控制 12.3.1 副本构建器 12.4 只读类 12.4.1 创建只读类 12.4.2 “一成不变”的弊端 12.4.3 不变字串 ...

    Java高并发高性能分布式框架从无到有微服务架构设计.doc

    的对象变少),但是,读取数据时需要序列化/反序列化,因此会比堆缓存要慢很多。有 Ehcache 3.x、MapDB实现磁盘缓存 即缓存数据存储在磁道上,在JVM重启时数据还存在的,而堆缓存/堆外缓存数据会丢失 ,需要重新加载...

    Java初学者入门教学

    12.2.8 通过序列化进行深层复制 12.2.9 使克隆具有更大的深度 12.2.10 为什么有这个奇怪的设计 12.3 克隆的控制 12.3.1 副本构建器 12.4 只读类 12.4.1 创建只读类 12.4.2 “一成不变”的弊端 12.4.3 不变字串 ...

    java联想(中文)

    12.2.8 通过序列化进行深层复制 12.2.9 使克隆具有更大的深度 12.2.10 为什么有这个奇怪的设计 12.3 克隆的控制 12.3.1 副本构建器 12.4 只读类 12.4.1 创建只读类 12.4.2 “一成不变”的弊端 12.4.3 不变字串 ...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存...

    springboot整合Jackson实例项目-附工具类

    Jackson 运行时占用内存比较低,性能比较好;Jackson 有灵活的 API,可以很容易进行扩展和定制。 额外了解: Jackson 的 1.x 版本的包名是 org.codehaus.jackson , 当升级到 2.x 版本时,包名变为...

    JAVA_Thinking in Java

    12.2.8 通过序列化进行深层复制 12.2.9 使克隆具有更大的深度 12.2.10 为什么有这个奇怪的设计 12.3 克隆的控制 12.3.1 副本构建器 12.4 只读类 12.4.1 创建只读类 12.4.2 “一成不变”的弊端 12.4.3 不变字串 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     1.1.5 Java应用的持久化层  1.2 软件的模型  1.2.1 概念模型  1.2.2 关系数据模型  1.2.3 域模型  1.2.4 域对象  1.2.5 域对象之间的关系  1.2.6 域对象的持久化概念  1.3 小结  1.4 思考题 第2章 Java...

    Thinking in Java简体中文(全)

    12.2.8 通过序列化进行深层复制 12.2.9 使克隆具有更大的深度 12.2.10 为什么有这个奇怪的设计 12.3 克隆的控制 12.3.1 副本构建器 12.4 只读类 12.4.1 创建只读类 12.4.2 “一成不变”的弊端 12.4.3 不变字串 ...

    Thinking in Java 中文第四版+习题答案

    12.2.8 通过序列化进行深层复制 12.2.9 使克隆具有更大的深度 12.2.10 为什么有这个奇怪的设计 12.3 克隆的控制 12.3.1 副本构建器 12.4 只读类 12.4.1 创建只读类 12.4.2 “一成不变”的弊端 12.4.3 不变字串 ...

    Java高并发高性能分布式框架从无到有微服务架构设计(1).doc

    使用堆缓存的好处是没有序列化/反序列化,是最快的缓 存.缺点也很明显,当缓存的数据量很大时,GC〔垃圾回收〕暂停时间会变长,存储容量受 限于堆空间大小.一般通过软引用/弱引用来存储缓存对象,即当堆内存不足时,可以...

    疯狂JAVA讲义

    9.6.1 Java国际化的思路 346 9.6.2 Java支持的语言和国家 346 9.6.3 完成程序国际化 347 9.6.4 使用MessageFormat处理包含占位符的字符串 349 9.6.5 使用类文件代替资源文件 350 9.6.6 使用NumberFormat格式化...

Global site tag (gtag.js) - Google Analytics