gson和jackson生成json简单性能对比

2011年2月15日 | 标签: ,

测试环境:winXP、idea7.0.2、jvm1.5
测试本版:gson 1.6,jackson 1.7.3

主要测试Object2json的功能

测试代码:

  1.  
  2.         int objNum = 1000 ;
  3.         System. out. println ( "test object number : " + objNum ) ;
  4.         List jsObjects = new ArrayList (objNum ) ;
  5.         for ( int i = 0 ; i < objNum ; i++ ) {
  6.             JsonObject jo = new JsonObject ( ) ;
  7.             jo. setPint ( 1000 ) ;
  8.             jo. setPstring ( "test string" ) ;
  9.             jo. setPlong (0L ) ;
  10.             jo. setPboolean ( false ) ;
  11.             jo. setPshort ( ( short ) 1 ) ;
  12.             jo. setPbyte ( ( byte ) 50 ) ;
  13.             jo. setPdate ( new Date ( ) ) ;
  14.             Map map = new HashMap ( ) ;
  15.             for ( int a = 0 ; a < 100 ; a++ ) {
  16.                 map. put (i, i ) ;
  17.             }
  18.             List array = new ArrayList ( ) ;
  19.             for ( int a = 0 ; a < 100 ; a++ ) {
  20.                 array. add (i ) ;
  21.             }
  22.             jo. setPlist (array ) ;
  23.             jo. setPmap (map ) ;
  24.             jsObjects. add (jo ) ;
  25.         }
  26.  
  27.         Date gsonStart = new Date ( ) ;
  28.         Gson gs = new Gson ( ) ;
  29.         gs. toJson (jsObjects ) ;
  30.         Date gsonEnd = new Date ( ) ;
  31.         System. out. println ( "gson cost:" + (gsonEnd. getTime ( ) – gsonStart. getTime ( ) )+ "ms" ) ;
  32.  
  33.         try {
  34.             Date jacksonStart = new Date ( ) ;
  35.             ObjectMapper mapper = new ObjectMapper ( ) ;
  36.             SerializationConfig sc = mapper. getSerializationConfig ( ) ;
  37.             sc. setDateFormat ( new SimpleDateFormat ( "yyyy-MM-dd hh:mm:ss" ) ) ;
  38.             mapper. setSerializationConfig (sc ) ;
  39.             mapper. writeValueAsString (jsObjects ) ;
  40.             Date jacksonEnd = new Date ( ) ;
  41.             System. out. println ( "jackson 1 cost:"
  42.                       + (jacksonEnd. getTime ( ) – jacksonStart. getTime ( ) )+ "ms" ) ;
  43.         } catch ( Exception e ) {
  44.             e. printStackTrace ( ) ;
  45.         }
  46.  
  47.         try {
  48.             Date jacksonStart = new Date ( ) ;
  49.             ObjectMapper mapper = new ObjectMapper ( ) ;
  50.             SerializationConfig sc = mapper. getSerializationConfig ( ) ;
  51.             sc. setDateFormat ( new SimpleDateFormat ( "yyyy-MM-dd hh:mm:ss" ) ) ;
  52.             mapper. setSerializationConfig (sc ) ;
  53.             StringWriter sw = new StringWriter ( ) ;
  54.             JsonGenerator gen = new JsonFactory ( ). createJsonGenerator (sw ) ;
  55.             mapper. writeValue (gen, jsObjects ) ;
  56.             gen. close ( ) ;
  57.             sw. toString ( ) ;
  58.             Date jacksonEnd = new Date ( ) ;
  59.             System. out. println ( "jackson 2 cost:"
  60.                       + (jacksonEnd. getTime ( ) – jacksonStart. getTime ( ) )+ "ms" ) ;
  61.         } catch ( IOException e ) {
  62.             e. printStackTrace ( ) ;
  63.         }

jackson测试用了两种方式,一种直接生成string,另一种使用流来处理,以下分别用1和2来代替。
测试的Object包含了各种类型属性,测试成绩如下:

test object number : 100
gson cost:500ms
jackson 1 cost:625ms
jackson 2 cost:63ms

test object number : 1000
gson cost:1218ms
jackson 1 cost:813ms
jackson 2 cost:140ms

test object number : 5000
gson cost:3250ms
jackson 1 cost:1125ms
jackson 2 cost:281ms

test object number : 7000
gson cost:4297ms
jackson 1 cost:1250ms
jackson 2 cost:610ms

(公司机器太破了,2g内存,1w数据压不上去了,直接内存不够鸟)

可以看到在objNum为100的情况下gson要比jackson直接生成string的方式要快,但比jackson流方式差上8倍左右。随着objNum的增大gson已经开始比jackson的string方式慢,比流方式相差在8-12倍之间。

经过测试,显而易见jackson的流输出方式效率非常高,远远比直接输出string和gson的转换要快的多。

http://www.fafrei.com/2011/02/gson%e5%92%8cjackson%e7%94%9f%e6%88%90json%e7%ae%80%e5%8d%95%e6%80%a7%e8%83%bd%e5%af%b9%e6%af%94/


jackson官方地址:

http://wiki.fasterxml.com/JacksonInFiveMinutes#Full_Data_Binding_.28POJO.29_Example




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值