各种 Java 的序列化库的性能比较测试结果

孔小菜 发布于 2015/06/02 12:40
阅读 6K+
收藏 2

免责声明

本次测试专注于 cyclefree 数据结构的编码和解码。一些序列化程序支持循环检测/对象共享,一些序列化程序两种模型都支持,一些序列化程序包括了元数据,一些则没有,有的是跨平台的,有的只支持特定语言,有些是基于文本,有些是二进制。(请查阅 ToolBehavior

其他测试数据会产生不同的结果。不过,这些结果给出了评估这些库的原材料。

java version “1.7.0_51”
Java™ SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot™ 64-Bit Server VM (build 24.51-b03, mixed mode)

简单/通用:

不通过类的具体优化而序列化 POJO 树。序列化类预先已知。循环检测/目标共享检测还没有完成。

检验正确性...

[done]

预热...java-built-in  hessian kryo fast-serialization jboss-serialization jboss-marshalling-river protostuff msgpack-databind json/jackson/databind json/jackson/db-afterburner json/protostuff-runtime json/google-gson/databind json/svenson-databind json/flexjson/databind json/fastjson/databind smile/jackson/databind smile/jackson/db-afterburner bson/jackson/databind xml/xstream+c xml/jackson/databind-aalto

[done]

默认:

序列化任意对象图,循环检测功能。无法预先知道序列化的类。只有支持全目标图形序列的序列化程序包括在内。

检验正确性...

[done]
预热… java-built-in-serializer hessian kryo-serializer fast-serialization-shared jboss-serialization
[done]

简单/具体:

仅用代码序列化特定的类,或者有特殊的类。

检验正确性...

[done]
预热...kryo-opt wobly wobly-compact protobuf protostuff protobuf/protostuff thrift thrift-compact avro json/json-lib-databind json/jsonij-jpath
[done]

手动

仅通过手写序列化代码来序列化具体的类。

检验正确性...
[done]
预热… java-manual kryo-manual protostuff-manual avro-generic json/jackson/manual json/protostuff-manual json/google-gson/manual json/json.simple/manual json/json-smart/manual/tree json/org.json/manual/tree json/argo-manual/tree smile/jackson/manual bson/mongodb xml/woodstox-manual xml/aalto-manual xml/xstream+c-woodstox xml/xstream+c-aalto xml/xstream+c-fastinfo xml/javolution xml/fastinfo-manual
[done]

Source:https://github.com/eishay/jvm-serializers/wiki

加载中
0
不日小鸡
第一句就是免责声明是什么意思?
不日小鸡
回复 @红薯 : 我的意思是这是自己的测试结果,并不需要负什么责任啊。 听说红薯是OSC最帅的?
红薯
红薯
就是说测试条件单一,可能会造成结果并不完全准确
0
SimonYe
SimonYe
赞。。。
0
天天可乐
天天可乐

Protostuff经过测试,速度的确是最快的,但是有个致命缺点(thrift和protobuf也一样):集合中的null元素会被过滤掉,不参与序列化!

举例:

服务端返回<"s1",null,"s2">,经protostuff序列化后,居然返回<"s1","s2">。

可能有人说不要返回null,这里加个场景:服务端获取数据库中某个字段的值进行返回,其中有的字段在定义时就是null,此时返回后protostuff居然丢弃了!!!

这是非常不友好的行为,JSON和XML就没有这样的问题。当然thrift也有差不多的问题。

@红薯

返回顶部
顶部