fastJson,jackJson,Gson性能比较
在Java里面,我们经常使用JSON格式的工具包对字符串或者对象进行解析,一般用得比较广泛的三种分别为:fastJson,jackJson,Gson,关于各个工具包的性能比较网络上比比皆是,在这里我只阐述在我本机环境下的测试结果,然后在根据结果对三种工具包进行一个解析,首先先贴代码: importjava.util.Map; importorg.codehaus.jackson.map.ObjectMapper; importcom.alibaba.fastjson.JSONObject; importcom.google.gson.Gson; publicclassJsonTest1{ privatestaticlongcount=10000; /** *@paramargs *@throwsException */ publicstaticvoidmain(String[]args)throwsException{ //TODOAuto-generatedmethodstub gson(); System.gc(); jackJson(); System.gc(); fastJson(); System.gc(); System.out.println("---------------------------------------------------------------"); gsonJson(); System.gc(); jackJsonJson(); System.gc(); fastJsonJson(); } privatestaticlonggson(){ Demodemo=newDemo(); demo.setCmd("1"); demo.setContent("dd"); longendTime1=System.currentTimeMillis(); for(inti=0;i<count;i++){ Gsongson=newGson(); gson.toJson(demo); } longendTime2=System.currentTimeMillis(); System.out.println("gson--obj--json:"+(count*1000)/(endTime2-endTime1)); returnendTime2-endTime1; } privatestaticlongjackJson()throwsException{ Demodemo=newDemo(); demo.setCmd("1"); demo.setContent("dd"); longendTime1=System.currentTimeMillis(); for(inti=0;i<count;i++){ ObjectMapperobjectMapper=newObjectMapper(); objectMapper.writeValueAsString(demo); } longendTime2=System.currentTimeMillis(); System.out.println("jackJson--obj--json:"+(count*1000)/(endTime2-endTime1)); returnendTime2-endTime1; } privatestaticlongfastJson(){ Demodemo=newDemo(); demo.setCmd("1"); demo.setContent("dd"); longendTime1=System.currentTimeMillis(); for(inti=0;i<count;i++){ JSONObjectjsonObject=newJSONObject(); jsonObject.toJSON(demo); } longendTime2=System.currentTimeMillis(); System.out.println("fastJson--obj--json:"+(count*1000)/(endTime2-endTime1)); returnendTime2-endTime1; } privatestaticlonggsonJson(){ Stringjson="{"cmd":"1","sss":"dd"}"; longendTime1=System.currentTimeMillis(); for(inti=0;i<count;i++){ Gsongson=newGson(); gson.fromJson(json,Map.class); } longendTime2=System.currentTimeMillis(); System.out.println("gson--json--obj:"+(count*1000)/(endTime2-endTime1)); returnendTime2-endTime1; } privatestaticlongjackJsonJson()throwsException{ Stringjson="{"cmd":"1","sss":"dd"}"; longendTime1=System.currentTimeMillis(); for(inti=0;i<count;i++){ ObjectMapperobjectMapper=newObjectMapper(); objectMapper.readValue(json,Map.class); } longendTime2=System.currentTimeMillis(); System.out.println("jackJson--json--obj:"+(count*1000)/(endTime2-endTime1)); returnendTime2-endTime1; } privatestaticlongfastJsonJson(){ Stringjson="{"cmd":"1","sss":"dd"}"; longendTime1=System.currentTimeMillis(); for(inti=0;i<count;i++){ JSONObjectjsonObject=newJSONObject(); jsonObject.parSEObject(json,Map.class); } longendTime2=System.currentTimeMillis(); System.out.println("fastJson--json--obj:"+(count*1000)/(endTime2-endTime1)); returnendTime2-endTime1; } } classDemo{ privateStringcmd; privateStringcontent; publicStringgetCmd(){ returncmd; } publicvoidsetCmd(Stringcmd){ this.cmd=cmd; } publicStringgetContent(){ returncontent; } publicvoidsetContent(Stringcontent){ this.content=content; } } 运行结果如下: 我们可以看到fastJson的速度明显高于其他两个,真的是这样的吗?我们把代码在改进一下。 importjava.util.Map; importorg.codehaus.jackson.map.ObjectMapper; importcom.alibaba.fastjson.JSONObject; importcom.google.gson.Gson; publicclassJsonTest{ privatestaticObjectMapperobjectMapper=newObjectMapper(); privatestaticGsongson=newGson(); privatestaticJSONObjectjsonObject=newJSONObject(); privatestaticlongcount=10000; /** *@paramargs *@throwsException */ publicstaticvoidmain(String[]args)throwsException{ //TODOAuto-generatedmethodstub gson(); System.gc(); jackJson(); System.gc(); fastJson(); System.gc(); System.out.println("---------------------------------------------------------------"); gsonJson(); System.gc(); jackJsonJson(); System.gc(); fastJsonJson(); } privatestaticlonggson(){ Demodemo=newDemo(); demo.setCmd("1"); demo.setContent("dd"); longendTime1=System.currentTimeMillis(); for(inti=0;i<count;i++){ gson.toJson(demo); } longendTime2=System.currentTimeMillis(); System.out.println("gson--obj--json:"+(count*1000)/(endTime2-endTime1)); returnendTime2-endTime1; } privatestaticlongjackJson()throwsException{ Demodemo=newDemo(); demo.setCmd("1"); demo.setContent("dd"); longendTime1=System.currentTimeMillis(); for(inti=0;i<count;i++){ objectMapper.writeValueAsString(demo); } longendTime2=System.currentTimeMillis(); System.out.println("jackJson--obj--json:"+(count*1000)/(endTime2-endTime1)); returnendTime2-endTime1; } privatestaticlongfastJson(){ Demodemo=newDemo(); demo.setCmd("1"); demo.setContent("dd"); longendTime1=System.currentTimeMillis(); for(inti=0;i<count;i++){ jsonObject.toJSON(demo); } longendTime2=System.currentTimeMillis(); System.out.println("fastJson--obj--json:"+(count*1000)/(endTime2-endTime1)); returnendTime2-endTime1; } privatestaticlonggsonJson(){ Stringjson="{"cmd":"1","sss":"dd"}"; longendTime1=System.currentTimeMillis(); for(inti=0;i<count;i++){ gson.fromJson(json,"sss":"dd"}"; longendTime1=System.currentTimeMillis(); for(inti=0;i<count;i++){ objectMapper.readValue(json,"sss":"dd"}"; longendTime1=System.currentTimeMillis(); for(inti=0;i<count;i++){ jsonObject.parSEObject(json,Map.class); } longendTime2=System.currentTimeMillis(); System.out.println("fastJson--json--obj:"+(count*1000)/(endTime2-endTime1)); returnendTime2-endTime1; } } classDemo{ privateStringcmd; privateStringcontent; publicStringgetCmd(){ returncmd; } publicvoidsetCmd(Stringcmd){ this.cmd=cmd; } publicStringgetContent(){ returncontent; } publicvoidsetContent(Stringcontent){ this.content=content; } } 运行结果如下: 看到差异了没?上面的第一部分的代码是每次都要去new新对象出来,在这点上导致了fastJson有绝对的优势,而当我们初始化的时候就把该准备的资源准备好呢?fastJson的优势一下就体现不出来了,经过多次测试发现最快的是gson。而且根据上面的结果我们可以看出来fastJson的优势是在json转化为对象的时候比较快,而对象转化为json格式的字符串的时候性能上是没什么优势的,反而是最差的。 结论:
本次的jar版本为: fastJson版本为1.1.41 GSON:2.1 O 本文出自 “陈砚羲” 博客,请务必保留此出处http://www.52php.cn/article/p-vylgsszs-bgm.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |