以下报表数据来自在 jvm-serializers 测试工具.

 : 硬件环境为笔记本电脑所以对数据可能会造成一些影响.以下只关心JSON框架的对比度.

硬件配置

本机配置::

JSON相关框架-性能比较 开发一组 enein

 采用VM 进行框架测试配置

JSON相关框架-性能比较 开发一组 enein JSON相关框架-性能比较 开发一组 enein

先简单介绍下一些网络传输协议:

JSON相关框架-性能比较 开发一组 enein  二进制协议(详情请看软件系统开发中的数据交换协议来了解决软件系统中的一些相关协议

JSON相关框架-性能比较 开发一组 enein Jackson分为三种模式(stream,tree,databind);以下没有对stream

JSON相关框架-性能比较 开发一组 enein GsonGoogle开发的一套Java对象与JSON相互转化的工具

JSON相关框架-性能比较 开发一组 enein Json-lib 现在项目里使用的轻量级json框架.

JSON相关框架-性能比较 开发一组 enein Fastjson 阿里巴巴-温少 开发的json框架 (号称最快的json框架)

JSON相关框架-性能比较 开发一组 enein 

Smile (官方文档的一句话定义:”  Optional Smile jar (jackson-mrbean) contains support for JSON-compatible binary format called "Smile". It depends on core module.)  Json框架相关可以转换为其它格式(二进制,xml….).

 

:以下数据暂且没有对Jackson stream 流进行测试.之后会有对其进行的测试.

 JSON相关框架-性能比较 开发一组 enein

 (报表信息在本目录下的(json框架数据测试报表.rar)即可看到相关柱状图(nanos:表示为毫微秒’;tps(transactions per second)

 

Columns:

create:  create an object (using the classes specified by the serialization tool)

ser:  create an object and serialize it    序列化时间

+same:  serialize the same object (i.e. doesn't include creation time)

deser:  deserialize an object  反序列化时间

+shal:  deserialize an object and access the top-level fields

+deep:  deserialize an object and access all the fields

total:  create + serialize + deserialize and access all fields 

size:  the size of the serialized data  序列化数据大小

+dfl:  the size of the serialized data compressed with Java's built-in implementation of DEFLATE (zlib)

 

以上信息可以看出(只考虑json协议相关):  fastjson-databind ser/deser(序列化/反序列化)的时间最快(为什最快?)。其次就是Jackson.

以上测试中没有包含jackson-stream流的测试.其实这个jackson的流解析器是最快的.

 小结

ps: 介于FastJson Jackson 两个框架作者偏向Jackson.以下说明理由.

FastJson

虽然序列化反序列化比较快.但文档支持,Annotation 支持.循环递归等问题处理还不是很完善(虽然网上也已经有对其相应的解决办法).

由于之前使用JSON协议的处理方法都比较简单没有使用到较深入的技术.所以在‘众多‘框架中选型也是比较容易的.但考虑到将来要面对的一些序列化/反序列化.深递归.注解.协议转换.解析器的使用等方面.框架的选型还是要考虑方面还是很多的. Jackson满足我以下列出的五条.

(本人想法以及技术有限想到只有这些)

 Jackson

提供了三种处理Json的方法,分别是:

 Streaming API :基于独立事件模型处理JSON。效率最高,是下面两种方式的基础。
分别用org.codehaus.jackson.JsonParser org.codehaus.jackson.JsonGenerator 读写Json

Tree Model :基于一个可变的树表示一个Json模型。最灵活
org.codehaus.jackson.map.ObjectMapper
创建树(基于JsonNode为节点)
Tree Model
XML DOM类似

Data Binding:用属性存取或者注释来处理从JsonPOJO的转换。最方便,常用这种API
有简单绑定和全数据绑定,同样用org.codehaus.jackson.map.ObjectMapper处理

 以下只对Fastjson Jackson 进行阐述. 属于个人观点

 【1】       程序员比较关心的是wiki文档.一个好的框架离不开一个好的文档.

【2】       程序员上手要快(框架文档要非常详细),对公司项目各项目之间可利用性要高.

【3】       框架是否开源.源代码可学习价值.

【4】       结合其他技术的能力一定要强.执行效率,是否可以移植平台.

【5】       流行程度.历史背景等其它因素的支持

PS: 以下测试为转载测试(特此注明) run using Japex Report

原文地址: http://www.cowtowncoder.com/blog/archives/2009/02/entry_204.html

单核处理器: http://www.cowtowncoder.com/perf/json-count-2009-02-17/index.html

dual-core system: http://www.cowtowncoder.com/perf/json-count-2009-02-17-2cpus/index.html

 

以上为japex report 生成的两个数据报表.从表中可以看出jackson-stream是最快的.jackson-tree其次.