Java對於處理JSON數據的序列化與反序列化目前常用的類庫有Gson、FastJSON、Jackson、jettison以及json-lib。在這里我們將對這些類庫在json序列化與反序列化方面的性能進行測試對比。
測試環境如下:
電腦:cpu為I3-4160,Win7 64位系統
編譯環境:jdk1.8.0_65,Myeclipse2014
各類庫版本:gson-2.6.2、fastjson-1.2.8、jackson -2.7.2、jettison-1.3.7(2014年后無更新)、json-lib-2.4(2012年后停止更新)
序列化的簡單對象:
publicclass User {
intid;
String name;
intage;
String address;
//get、set
}
測試結果:
序列化測試結果(Object->String),耗時單位均為ms
| 測試次數 類庫 |
100 |
1K |
1W |
10W |
50W |
100W |
1000W |
| gson |
8 |
25 |
63 |
230 |
680 |
1100 |
7790 |
| fastjson |
85 |
100 |
155 |
200 |
270 |
350 |
1850 |
| jackson |
35 |
48 |
80 |
150 |
255 |
360 |
2400 |
| Json-lib |
75 |
130 |
280 |
910 |
2725 |
4900 |
42500 |
| jettison |
70 |
85 |
110 |
210 |
400 |
590 |
4000 |
反序列化測試結果(String->Object),耗時單位均為ms
| 測試次數 類庫 |
100 |
1K |
1W |
10W |
50W |
100W |
1000W |
| gson |
9 |
21 |
60 |
195 |
570 |
950 |
7760 |
| fastjson |
85 |
105 |
150 |
225 |
370 |
545 |
3800 |
| jackson |
36 |
50 |
110 |
210 |
380 |
570 |
4460 |
| Json-lib |
86 |
185 |
405 |
1180 |
2950 |
4850 |
38300 |
| jettison |
6 |
20 |
50 |
230 |
460 |
710 |
4650 |
測試總結:
1、從測試結果可以看出gson在小於10w的數據量處理上,耗時相對較少,但是在數據越來越大的情況下耗時會明顯的增長。
2、無論那種情況下,json-lib的耗時都是最多的,引用時還需要額外幾個依賴包,且目前已經停止了更新,所以不推薦使用。
3、jackson在各階段數據量都有很不錯的性能,而fastjson在數據量較多的情況下也有很好性能。
4、jettison性能不錯,但只提供json和其JSONObject對象相互轉化的方法,轉為自定義bean時需要再手動將JSONObject對象轉為需要的bean。
