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
|
|
所有的測試結果
|
|
|
|