三款常見JSON類庫工具效能對比

來源:互聯網
上載者:User

近日做一些效能最佳化工作,在挑選JSON類庫時,發現除了一般常用的JSON-lib外,還有一款號稱效能最快的JSON處理器Jackson,於是用上了剛學會的JMeter,對這兩個類庫進行了簡單的效能對比。

 

Jackson:http://jackson.codehaus.org/

JSON-lib:http://json-lib.sourceforge.net/

Gson:http://code.google.com/p/google-gson/

 

測試環境:

 

1、工作電腦:Intel雙核E8400 共6GHz,記憶體4GB,WinXP

2、JSON-lib用最新的JDK15,GSON版本是最新的v1.4,Jackson也是最新的v1.5.5,JDK-v1.6.0_20,JMeter-v2.4

3、測試時不開啟任何無關進程,每完成一項測試後關閉JMeter整理記憶體後,再進行下一項測試,每項測試回合3次,取平均值

4、JSON轉Java Bean意為將JSON格式轉換成Java類,這個類內包括Map、List、Date、Integer/Long/Double、String等類型的屬性,Java Bean轉Json則同理。另外,兩者互轉,每次轉換的資料都是隨機產生

 

測試結果:

 

* 輸送量的值越大越好,總耗時的值越小越好

 

JSON轉Bean,5個線程並發,約200位元組對象,1千萬次轉換:

 

  Jackson JSON-lib Gson
TPS 64113.7 8067.4 13952.8
總耗時(秒) 155 1238 700

 

Bean轉JSON,5個線程並發,約200位元組對象,1千萬次轉換:

 

  Jackson JSON-lib Gson
TPS 54802 15093.2 17308.2
總耗時(秒) 181 661 560

 

JSON轉Bean,5個線程並發,約2K對象,1千萬次轉換:

 

  Jackson JSON-lib Gson
TPS 37314 2406.9 3657.50
總耗時(秒) 267 4120 2720

 

Bean轉JSON,5個線程並發,約2K對象,1千萬次轉換:

 

  Jackson JSON-lib Gson
TPS 30922.2 4274.8 4977.00
總耗時(秒) 322 2320 2000

 

測試總結:

 

1、顯而易見,無論是哪種形式的轉換,Jackson > Gson > Json-lib。

     Jackson的處理能力甚至高出Json-lib有10倍左右

2、JSON-lib似乎已經停止更新,最新的版本也是基於JDK15,而Jackson的社區則較為活躍;

3、在測試效能的同時,又以人肉方式對這三個類庫轉換的正確性 進行了檢查 ,三者均達100%正確 ;

4、JSON-lib在轉換諸如Date類型時較為累贅,如以下是兩者的轉換結果:

JSON-lib:

{"brithday":{"date":17,"day":2,"hours":9,"minutes":24,"month":7,"seconds":26,"time":1282008266398,"timezoneOffset":-480,"year":110}}

Jackson:

{"brithday":1282008123101}

5、JSON-lib依賴commons系列的包及 ezmorph包共 5個,而Jackson除自身的以外只依賴於commons-logging 
6、Jackson提供完整基於節點的Tree Model,以及完整的OJM資料繫結功能。

 

Jackson使用樣本:

 

JacksonMapper:

建立為餓漢式單例模式 ,Jackson用於轉換的核心類ObjectMapper無需每次都new一個object,官網上的一句話:can reuse, share globally

  Java代碼   /**   * @author xuanyin   *    */   public class JacksonMapper {          /**       *        */       private static final ObjectMapper mapper = new ObjectMapper();          /**       *        */       private JacksonMapper() {          }          /**       *        * @return       */       public static ObjectMapper getInstance() {              return mapper;       }      }    

JSON轉Bean:

  Java代碼   ......   String json = "...";   ObjectMapper mapper = JacksonMapper.getInstance();   YourBean bean = mapper.readValue(json, new YourBean().getClass());   ......    

Bean轉JSON:

  Java代碼   ......   YourBean bean = new YourBean();   ......  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.