加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

fastJson,jackJson,Gson性能比较

发布时间:2020-12-16 19:41:58 所属栏目:百科 来源:网络整理
导读:在Java里面,我们经常使用JSON格式的工具包对字符串或者对象进行解析,一般用得比较广泛的三种分别为: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格式的字符串的时候性能上是没什么优势的,反而是最差的。

结论:

  • 在做了初始化的情况下GSON的速度都是最快的。

  • 在使用GSON或jackJson做Json处理时最好有个全局的解析对象,不要每次调用的时候都去生成那样对性能的影响很大,另外经过测试,这里面没有线程安全问题。

  • fastJson在json转化为对象的应用场景下性能比较突出


本次的jar版本为:

fastJson版本为1.1.41

GSON:2.1

O


本文出自 “陈砚羲” 博客,请务必保留此出处http://www.52php.cn/article/p-vylgsszs-bgm.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读