開源 JSON 庫解析性能對比( Jackson / Json.simple / Gson )

   Json 已成爲當前服務器與 web 應用之間數據傳輸的公認標準。git

   微服務及分佈式架構常常會使用 Json 來傳輸此類文件,由於這已是 webAPI 的事實標準。github

   不過正如許多咱們習覺得常的事情同樣,你會以爲這是理所固然的便再也不深刻比較。web

   咱們不多會去想用到的這些 Json 庫到底有什麼不一樣,但事實上它們的確是不太同樣的。json

   所以,咱們團隊來對經常使用的三個 Json 庫運行測試,看看在解析不一樣大小文件時哪一個庫的速度最快。服務器

   在給定的文件大小下,你能夠看到不一樣庫之間的解析速度存在着明顯的差異。架構

   高吞吐量的狀況下,會頻繁傳輸解析小文件,所以一開始的時候可能性能的差距並不明顯。分佈式

   但若是你須要在很是高負載下頻繁地解析大量的小文件,差距就開始增大了。微服務

   不是全部的 Json 庫都叫"特侖蘇"。如何根據使用場景才選擇正確的庫是至關重要的。工具

1. 選取的開源 Json 庫

   選擇三個個主流的Json 庫來進行基準測試:Jackson, Json .simple,GSON性能

  • Yidong Fang 的 Json.simple (https://github.com/fangyidong/Json -simple)。Json.simple 是一個 Json 編解碼的Java工具庫。它旨在打造一個輕量簡單且高性能的工具庫。

  • Google 的 Gson (https://github.com/google/gson)。GSON 這個Java庫可以在 Java 對象和 Json 間進行相互轉換。同時它還提供了對Java泛型的完整支持,並且還不須要你在類上面添加註解。無需添加註解使用起來則更爲便捷,同時在沒法修改源代碼的狀況下這仍是一個必要的先決條件。

  • FasterXML 的 Jackson 項目(https://github.com/FasterXML/jackson)。Jackson 是一個數據處理的工具套件,它的亮點是流式的 Json 解析器及生成器。它是專爲Java設計的,同時也能處理其它非 Json 的編碼。

2. 相對條件下的基準測試

   咱們同時使用大文件和小文件對這些庫進行了基準測試。隨着文件大小的不一樣,處理這些文本所須要的系統資源也會隨之上升。

   這個基準測試主要關注兩個關鍵場景:

   1.大文件下(190MB)的解析速度與小文件(1KB)下的解析速度。大文件取自這裏:https://github.com/zeMirco/sf-city-lots-Json

   2.小文件是從這裏隨機生成的:http://www.Json -generator.com/

   不論是大文件仍是小文件,咱們都會用同一個庫重複運行10次。

   對於每個大文件,咱們都會用同一個庫來分別運行10 次。

   而對於小文件,在單個庫的單次運行中會重複執行10000 次。

   在小文件測試的各次迭代中,文件內容都不會駐留在內存裏。

大文件結果

   Jackson 與 Json .simple 領跑了這輪測試,總體來看 Jackson 又要略優於 Json .simple。

   從測試運行的平均結果來看,Jackson 與 Json .simple 在大文件上的表現要優秀。

   而 JsonNP 排名第三落後甚遠,Gson 更是遙遙墊底。

小文件結果

   上表記錄的是對每一個文件解析10次的平均時間,總的平均時間見下方。各個庫在小文件測試中奪冠的次數以下:

  • GSON - 14
  • Json P - 5
  • Jackson -1
  • Json .simple - 0

   Gson 這個冠軍仍是當之無愧的,Json.simple 第二也沒什麼懸念。Jackson這輪倒是墊底了。

   儘管 Json.simple 沒有在任何文件上奪得第一,但整體來看它的解析速度倒是排名第二位的。

   還有一個值得注意的是,儘管 Jackson 是這輪最慢的庫,可是它在全部文件中的表現都很是一致。

   其它三個庫雖然偶然會比 Jackson 快不少,但在另外一些文件上的解析速度倒是旗鼓至關甚至更差。

3. 最後總結

   解析速度並不是衡量一個Json 庫的惟一指標,但它的確很是重要。

   經過運行此次基準測試,咱們發現沒有一個庫能在全部文件上擊敗對手。

   大文件中表現優秀的卻在小文件上栽了根頭,反之亦然。

若是要從解析速度來看選擇哪一個庫的話還得取決於你的使用場景。

  • 若是你的應用常常會處理大的 Json 文件,那麼 Jackson 應該是你的菜。Gson 在大文件上表現得至關吃力。
  • 若是你主要是處理小文件請求,好比某個微服務或者分佈式架構的初始化,那麼 Gson 當是首選。Jackson 在小文件上的表現則不如人意。
  • 若是這兩種文件你都常常會處理到,那麼在兩輪表現中都位居第二的 Json.simple 對此類場景則更爲適合。

    若是你對 Json 庫的解析速度比較敏感的話。

   大文件選 Jackson,小文件選GSON,二者則Json .simple。

相關文章
相關標籤/搜索