- List list = new ArrayList();
- int j = 0;
- U u = null;
- while (j<1000000){
- u = new U();
- u.setAge(j);
- u.setName("zhangsan " + j);
- u.setNo("" + j);
- list.add(u);
- j++;
- }
运行结果:
ali fastjson
- long s = System.currentTimeMillis();
- System.out.println("before alibaba:" +s);
- String aliJson = com.alibaba.fastjson.JSON.toJSONString(list);
- long e = System.currentTimeMillis();
- System.out.println("after alibaba:" +e);
- System.out.println("diff:" + (e-s));
- list = null;
- long s3 = System.currentTimeMillis();
- List sult = (List) com.alibaba.fastjson.JSONObject.parse(aliJson);
- long e3 = System.currentTimeMillis();
- System.out.println("反 diff:" + (e3-s3));
- long s1 = System.currentTimeMillis();
- System.out.println("before Gson:" + s1);
- Gson gson = new Gson();
- String gsonStr = gson.toJson(list);
- long e1 = System.currentTimeMillis();
- System.out.println("after Gson:" + e1);
- System.out.println("diff:" + (e1-s1));
- list = null;
- long s4 = System.currentTimeMillis();
- List sult2 = gson.fromJson(gsonStr,List.class);
- long e4 = System.currentTimeMillis();
- System.out.println("反 diff:" + (e4-s4));
测试结果:
数据较少时,gson还是比较快的
当数据多时,【当前测试数据100万】gson 比较慢,而且非常耗内存
- 比较来说, Gson 比 fastjson 考虑更全面, 对用 URL , UUID, BIT_SET, CALENDAR 等等,都有特定的输出规则.
- 小数量的调用 Gson 比 fastjson 快一点. (几十毫秒,可以毫不在意.猜测是因为 javassist 生成新的 Wrapper 类导致,因为还要编译的.)
- 大数量的调用 fastjson 比 Gson 快. (千万级别的.还不太确定为什么会变快, 猜测是 gson 的反射调用,毕竟比不上 fastjson Wrapper 类的真实调用.)
- 代码可阅读性: fastjson 比 Gson 好很多很多.
- fastjson 在要序列化对象的类型的判断上,使用的是 if else ,
- Gson 使用的是遍历 TypeAdapterFactory集合,在每个 TypeAdapterFactory 里面做判断.而且使用了 N 多的匿名内部类, 想要一眼看出有哪些 TypeAdapterFactory 的实现都很困难.
- 如果普通日常使用,推荐使用 fastjson,简单易懂,并且是国内程序员开发,有问题可以较容易的获得支持.
- Gson 有对各种类型的属性支持, 如果有特殊类型json化需求可以选择 gson ,并自定义扩充.