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。