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。