各种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等格式的序列化工具的评测。
分享到:
相关推荐
在这个主题中,我们将深入探讨四种常用的序列化工具:Gson, Jackson, FastJson和ProtoBuf,以及与ProtoBuf相关的`proto.exe`工具。 1. Gson(Google Gson): Gson是由Google提供的Java库,用于将Java对象转换为...
本篇文章将深入探讨Java序列化的概念、常见的序列化库以及如何进行性能测试。 首先,我们要理解什么是序列化。Java中的序列化是通过实现`java.io.Serializable`接口来标记一个类可以被序列化。当一个对象被序列化时...
本篇文章将深入探讨Java中JSON的序列化与反序列化,以及相关的工具库。 一、JSON概述 JSON是一种独立于语言的数据格式,它的结构简单明了,易于人阅读和编写,同时也容易让机器解析和生成。JSON主要由键值对(key-...
综上所述,protobuf是一种强大的数据序列化工具,通过.proto文件定义数据结构,利用protoc编译器生成各语言代码,提供高效、小巧的序列化与反序列化功能,广泛应用于各种软件工程中。掌握protobuf能够提升软件的性能...
本文研究比较了当前比较流行的四款Java的JSON类库的性能,以期为开发者在选择JSON序列化工具时提供依据。 二、基于Java的JSON类库 2.1 Gson Gson是Google公司下的一个开源项目,它能够将Java对象转换为JSON对象...
这个名为"protobuf/thrift/avro-序列化性能测试工程"的项目专注于对比这三种技术的性能。 protobuf是Google开发的一种高效的数据序列化协议,它提供了简洁、快速和跨平台的序列化方法。protobuf通过定义.proto文件...
消息序列化与反序列化是IT领域中一个关键的概念,...正确选择和使用序列化工具不仅可以提升系统的性能,还能增强系统的互操作性和可维护性。对这个主题深入理解并持续关注新技术的发展,对于IT专业人士来说非常重要。
总结,Protocol Buffers是Python及其他编程语言中实现高效数据序列化的重要工具,尤其在跨语言通信和高性能应用中,protobuf的优势更为突出。通过学习和掌握protobuf,开发者可以提高数据处理效率,简化系统间的数据...
13. **java.io.ObjectInputStream**和**java.io.ObjectOutputStream**:用于对象的序列化和反序列化。 14. **java.io.PrintWriter**:用于向文本输出流写入格式化的文本。 15. **java.util.Scanner**:提供了一种...
序列化和反序列化是计算机科学中的重要概念,特别是在数据存储、网络通信和对象持久化等领域。简单来说,序列化是将对象的状态转换为可存储...同时,了解不同语言和库的实现方式,能帮助你更好地选择和使用序列化工具。
总之,Google FlatBuffers是一种高性能、低开销的序列化工具,尤其适合对性能敏感的场景,例如游戏引擎和实时数据处理应用。它的设计理念是提供直接的二进制访问,减少不必要的解析步骤,从而提高整体系统的效率。
关于性能测试,通常我们会创建大量数据并比较这些库在序列化和反序列化上的速度。性能测试可能涉及CPU时间、内存使用以及处理大量数据时的稳定性和可扩展性。然而,具体测试结果会因硬件、软件环境和数据结构的不同...
总结来说,JedisSerialization项目旨在提供一个参考,演示如何利用不同的序列化工具,如JDK、XML、JSON和Protostuff,配合Jedis库进行Java对象与Redis之间的数据交换。通过比较和实践这些方法,开发者可以根据项目的...
3. 数据绑定类:同时,工具还会生成数据模型类,这些类对应于WSDL中的数据类型,用于序列化和反序列化XML消息。 二、WSDL2Java的基本使用步骤 1. 安装Apache CXF:首先,需要在本地安装Apache CXF框架,可以通过...
1. **序列化与反序列化速度**:通过大量数据的序列化和反序列化操作,比较它们的执行时间。 2. **内存消耗**:观察在处理相同数据时,各库的内存占用情况。 3. **API易用性**:根据API文档和实际使用体验,评估其...
1. **对象序列化与反序列化**:为了比较两个对象,工具可能需要先将它们转换成一致的数据格式,如JSON字符串,然后再进行比较。这样可以忽略掉对象的实例标识(内存地址)差异,专注于字段值的对比。 2. **递归比较...
6. **JSON序列化与反序列化**:可能包含对Gson或Jackson库的封装,方便JSON对象的转换。 7. **数字运算**:如数学计算、百分比转换、数字格式化等。 8. **线程与并发**:提供线程安全的操作,如并发计数器、锁管理...
"lyzjson"是用户创建的JSON生成模块,位于"lyz"包内,这通常意味着它包含了一系列类或方法,用于构建和序列化Java对象到JSON格式的字符串。开发者可能设计这个工具来满足特定的需求,比如提供更灵活的配置选项、更好...
1. **性能效率**:Ice通常会比Java Socket更高效,因为它使用了优化的序列化和反序列化机制,减少了网络传输的数据量。此外,Ice的多线程和异步调用模型也能提高处理并发请求的能力。 2. **易用性**:Ice提供了丰富...