Java序列化框架性能比較
jvm-serializers提供了一个非常好的比較各种Java序列化的的測试套件。 它罗列了各种序列化框架。 能够自己主动生成測试报告。
我在AWS c3.xlarge机器上进行了測试,一下是測试报告与解析。
关键的測试数据的统计代码例如以下:
|
|
測试时序列化和反序列化会迭代多次。默认2000次。
測试会有一个限定时间,一轮測试完毕后时间还有的话还会继续新的一轮的測试。 因此, 因为不同的框架花费的时间不同, 測试的轮数也不一样。
測试平台
OS:Linux (CentOS 6.4)
JVM:JDK 1.7.0_17
CPU: c3.xlarge
Cores (incl HT):4
免责声明
本測试主要关注无循环引用的数据结构, 可是如此众多的序列化框架还是各有不同:
- 有些支持循环引用检測
- 有些会输出所有的元数据。有些不会
- 有些支持跨平台,有些仅仅支持特定的编程语言
- 有些是基于文本的。有些却基于二进制
- 有些支持向前向后兼容, 有些仅仅支持向前或者向后,有些所有不支持
(查看ToolBehavior页面以了解一些框架的特性)
虽然别的測试数据可能会生成不同的測试结果(比如在每一个字符串中添加非ascii字符), 此測试还是会提供一个各个序列化框架的性能的原始预计。
序列化框架Serializers(无共享引用)
- 无循环引用。 一个对象假设被引用两次则会序列化两次
- 没有手工优化
- schema预先已知
Ser Time+Deser Time (ns)
Ser
Time+Deser Time (ns)
Size, Compressed in bytes
Size,
Compressed in bytes
|
|
全对象图序列化框架Full Object Graph Serializers
- 支持所有的object graph读写. Object graph可能包括循环引用.
- 无预先处理, 没有预先的类生成。注冊. 所有都执行时产生, 比方使用反射.
- 注意通常不会跨编程语言。
然而JSON/XML格式因为其特殊性能够跨语言.
Ser Time+Deser Time (ns)
Ser
Time+Deser Time (ns)
Size, Compressed [light] in bytes
Size,
Compressed in bytes
|
|
跨语言二进制序列化框架cross Lang Binary Serializers
- 无循环引用
- schema预先已知
Ser Time+Deser Time (ns)
Ser
Time+Deser Time (ns)
Size, Compressed in bytes
Size,
Compressed in bytes
|
|
XML/JSon序列化框架
- 基于文本
- Mixed regarding required preparation, object graph awareness (references).
Ser Time+Deser Time (ns)
Ser
Time+Deser Time (ns)
Size, Compressed in bytes
Size,
Compressed in bytes
|
|
手工优化的序列化框架Manually optimized Serializers
Ser Time+Deser Time (ns)
Ser
Time+Deser Time (ns)
Size, Compressed in bytes
Size,
Compressed in bytes
|
|
特性对性能的影响Cost of features
shows performance vs convenience of manually-selected libs.
- 循环引用。 schema预知。手工优化cycle free, schema known at compile time, manual optimization: kryo-manual, msgpack-manual
- 循环引用, schema预知cycle free, schema known at compile time: protostuff, fst-flat-pre, kryo-flat-pre. (note: protostuff uses class generation while the other two just require a list of classes to be written)
- 循环引用, schema编译时未知 cycle free, schema UNKNOWN at compile time: fst-flat, kryo-flat, protostuff-runtime, msgpack-databind
- 全图读写。schema编译时未知 full object graph awareness, schema UNKNOWN at compile time: fst, kryo.
Ser Time+Deser Time (ns)
Ser
Time+Deser Time (ns)
Size, Compressed in bytes
Size,
Compressed in bytes
|
|
所有的測试结果
|
|
|
|