fastJson,jackJson,Gson性能比较
2014-08-22 00:00
645 查看
在Java里面,我们经常使用JSON格式的工具包对字符串或者对象进行解析,一般用得比较广泛的三种分别为:fastJson,jackJson,Gson,关于各个工具包的性能比较网络上比比皆是,在这里我只阐述在我本机环境下的测试结果,然后在根据结果对三种工具包进行一个解析,首先先贴代码:
运行结果如下:
我们可以看到fastJson的速度明显高于其他两个,真的是这样的吗?我们把代码在改进一下。
运行结果如下:
看到差异了没?上面的第一部分的代码是每次都要去new新对象出来,在这点上导致了fastJson有绝对的优势,而当我们初始化的时候就把该准备的资源准备好呢?fastJson的优势一下就体现不出来了,经过多次测试发现最快的是gson。而且根据上面的结果我们可以看出来fastJson的优势是在json转化为对象的时候比较快,而对象转化为json格式的字符串的时候性能上是没什么优势的,反而是最差的。
结论:
在做了初始化的情况下GSON的速度都是最快的。
在使用GSON或jackJson做Json处理时最好有个全局的解析对象,不要每次调用的时候都去生成那样对性能的影响很大,另外经过测试,这里面没有线程安全问题。
fastJson在json转化为对象的应用场景下性能比较突出
本次的jar版本为:
fastJson版本为1.1.41
GSON:2.1
O
本文出自 “陈砚羲” 博客,请务必保留此出处http://chenyanxi.blog.51cto.com/4599355/1543445
import java.util.Map; import org.codehaus.jackson.map.ObjectMapper; import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; public class JsonTest1 { private static long count=10000; /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub gson(); System.gc(); jackJson(); System.gc(); fastJson(); System.gc(); System.out.println("---------------------------------------------------------------"); gsonJson(); System.gc(); jackJsonJson(); System.gc(); fastJsonJson(); } private static long gson(){ Demo demo=new Demo(); demo.setCmd("1"); demo.setContent("dd"); long endTime1=System.currentTimeMillis(); for(int i=0;i<count;i++){ Gson gson=new Gson(); gson.toJson(demo); } long endTime2=System.currentTimeMillis(); System.out.println("gson--obj--json:"+(count*1000)/(endTime2-endTime1)); return endTime2-endTime1; } private static long jackJson() throws Exception{ Demo demo=new Demo(); demo.setCmd("1"); demo.setContent("dd"); long endTime1=System.currentTimeMillis(); for(int i=0;i<count;i++){ ObjectMapper objectMapper = new ObjectMapper(); objectMapper.writeValueAsString(demo); } long endTime2=System.currentTimeMillis(); System.out.println("jackJson--obj--json:"+(count*1000)/(endTime2-endTime1)); return endTime2-endTime1; } private static long fastJson(){ Demo demo=new Demo(); demo.setCmd("1"); demo.setContent("dd"); long endTime1=System.currentTimeMillis(); for(int i=0;i<count;i++){ JSONObject jsonObject=new JSONObject(); jsonObject.toJSON(demo); } long endTime2=System.currentTimeMillis(); System.out.println("fastJson--obj--json:"+(count*1000)/(endTime2-endTime1)); return endTime2-endTime1; } private static long gsonJson(){ String json="{\"cmd\":\"1\",\"sss\":\"dd\"}"; long endTime1=System.currentTimeMillis(); for(int i=0;i<count;i++){ Gson gson=new Gson(); gson.fromJson(json,Map.class); } long endTime2=System.currentTimeMillis(); System.out.println("gson--json--obj:"+(count*1000)/(endTime2-endTime1)); return endTime2-endTime1; } private static long jackJsonJson() throws Exception{ String json="{\"cmd\":\"1\",\"sss\":\"dd\"}"; long endTime1=System.currentTimeMillis(); for(int i=0;i<count;i++){ ObjectMapper objectMapper = new ObjectMapper(); objectMapper.readValue(json, Map.class); } long endTime2=System.currentTimeMillis(); System.out.println("jackJson--json--obj:"+(count*1000)/(endTime2-endTime1)); return endTime2-endTime1; } private static long fastJsonJson(){ String json="{\"cmd\":\"1\",\"sss\":\"dd\"}"; long endTime1=System.currentTimeMillis(); for(int i=0;i<count;i++){ JSONObject jsonObject=new JSONObject(); jsonObject.parseObject(json, Map.class); } long endTime2=System.currentTimeMillis(); System.out.println("fastJson--json--obj:"+(count*1000)/(endTime2-endTime1)); return endTime2-endTime1; } } class Demo { private String cmd; private String content; public String getCmd() { return cmd; } public void setCmd(String cmd) { this.cmd = cmd; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
运行结果如下:
我们可以看到fastJson的速度明显高于其他两个,真的是这样的吗?我们把代码在改进一下。
import java.util.Map; import org.codehaus.jackson.map.ObjectMapper; import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; public class JsonTest { private static ObjectMapper objectMapper = new ObjectMapper(); private static Gson gson=new Gson(); private static JSONObject jsonObject=new JSONObject(); private static long count=10000; /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub gson(); System.gc(); jackJson(); System.gc(); fastJson(); System.gc(); System.out.println("---------------------------------------------------------------"); gsonJson(); System.gc(); jackJsonJson(); System.gc(); fastJsonJson(); } private static long gson(){ Demo demo=new Demo(); demo.setCmd("1"); demo.setContent("dd"); long endTime1=System.currentTimeMillis(); for(int i=0;i<count;i++){ gson.toJson(demo); } long endTime2=System.currentTimeMillis(); System.out.println("gson--obj--json:"+(count*1000)/(endTime2-endTime1)); return endTime2-endTime1; } private static long jackJson() throws Exception{ Demo demo=new Demo(); demo.setCmd("1"); demo.setContent("dd"); long endTime1=System.currentTimeMillis(); for(int i=0;i<count;i++){ objectMapper.writeValueAsString(demo); } long endTime2=System.currentTimeMillis(); System.out.println("jackJson--obj--json:"+(count*1000)/(endTime2-endTime1)); return endTime2-endTime1; } private static long fastJson(){ Demo demo=new Demo(); demo.setCmd("1"); demo.setContent("dd"); long endTime1=System.currentTimeMillis(); for(int i=0;i<count;i++){ jsonObject.toJSON(demo); } long endTime2=System.currentTimeMillis(); System.out.println("fastJson--obj--json:"+(count*1000)/(endTime2-endTime1)); return endTime2-endTime1; } private static long gsonJson(){ String json="{\"cmd\":\"1\",\"sss\":\"dd\"}"; long endTime1=System.currentTimeMillis(); for(int i=0;i<count;i++){ gson.fromJson(json,Map.class); } long endTime2=System.currentTimeMillis(); System.out.println("gson--json--obj:"+(count*1000)/(endTime2-endTime1)); return endTime2-endTime1; } private static long jackJsonJson() throws Exception{ String json="{\"cmd\":\"1\",\"sss\":\"dd\"}"; long endTime1=System.currentTimeMillis(); for(int i=0;i<count;i++){ objectMapper.readValue(json, Map.class); } long endTime2=System.currentTimeMillis(); System.out.println("jackJson--json--obj:"+(count*1000)/(endTime2-endTime1)); return endTime2-endTime1; } private static long fastJsonJson(){ String json="{\"cmd\":\"1\",\"sss\":\"dd\"}"; long endTime1=System.currentTimeMillis(); for(int i=0;i<count;i++){ jsonObject.parseObject(json, Map.class); } long endTime2=System.currentTimeMillis(); System.out.println("fastJson--json--obj:"+(count*1000)/(endTime2-endTime1)); return endTime2-endTime1; } } class Demo { private String cmd; private String content; public String getCmd() { return cmd; } public void setCmd(String cmd) { this.cmd = cmd; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
运行结果如下:
看到差异了没?上面的第一部分的代码是每次都要去new新对象出来,在这点上导致了fastJson有绝对的优势,而当我们初始化的时候就把该准备的资源准备好呢?fastJson的优势一下就体现不出来了,经过多次测试发现最快的是gson。而且根据上面的结果我们可以看出来fastJson的优势是在json转化为对象的时候比较快,而对象转化为json格式的字符串的时候性能上是没什么优势的,反而是最差的。
结论:
在做了初始化的情况下GSON的速度都是最快的。
在使用GSON或jackJson做Json处理时最好有个全局的解析对象,不要每次调用的时候都去生成那样对性能的影响很大,另外经过测试,这里面没有线程安全问题。
fastJson在json转化为对象的应用场景下性能比较突出
本次的jar版本为:
fastJson版本为1.1.41
GSON:2.1
O
本文出自 “陈砚羲” 博客,请务必保留此出处http://chenyanxi.blog.51cto.com/4599355/1543445
相关文章推荐
- fastJson,jackJson,Gson性能比较
- Gson与Fastjson性能比较
- FastJson、Gson、Jackson json解析性能比较
- Android JSON 解析(Android 原生解析 与 FastJson Gson )性能比较
- fastjson,gson的性能比较
- json解析性能比较(gson与jackson)
- Json学习总结(2)——Java 下的 JSON库性能比较:JSON.simple vs. GSON vs. Jackson vs. JSONP
- JSON库之性能比较:JSON.simple VS GSON VS Jackson VS JSONP
- Gson与FastJson解析性能分析
- FastJSON,Gson,Jackson性能对比
- Java 下的 JSON库性能比较:JSON.simple vs. GSON vs. Jackson
- Json学习总结(2)——Java 下的 JSON库性能比较:JSON.simple vs. GSON vs. Jackson vs. JSONP
- JSON库之性能比较:JSON.simple VS GSON VS Jackson VS JSONP
- JSON库之性能比较:JSON.simple VS GSON VS Jackson VS JSONP
- JSON库之性能比较:JSON.simple VS GSON VS Jackson VS JSONP
- Gson 和 FastJson 性能测试
- JSON解析工具比较,主要GSON和FastJSON
- JSON 解析库的使用 :Gson 和 fast-json比较
- Json解析速度比较-Android API、Gson、Fastjson
- fastJson和Gson的比较