最快的fastjson,经测试发现却是最慢的

博主对比了fastjson、Gson和jackson在Java中的性能,测试结果显示fastjson在对象序列化和反序列化上的速度并不如宣称的那么快,反而最慢。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在找java中json处理库,找了三个常见的类库:fastjson,Gson,jackson
在实际使用中,fastjson写法最简单,jackson写法最繁。
看fastjson的论坛,其作者温少号称“ gson性能极差!g并非google的缩写,是龟速的缩写!”(http://www.oschina.net/news/20006/fastjson-1-1-1)
于是写了个测试来测试三种json库的速度。我这里只按我的需求,处理对象序列化和反序列化。
在我的电脑上测试结果如下:
jackson serialize object:1219
fastjson serialize object:1906
Gson serialize object:1516
--------------
jackson parse object:2219
fastjson parse object:18156
Gson parse object:2078


三个类库基本是最新版本:fastjson-1.1.9.jar,gson-2.2.4.jar,jackson-all-1.9.11.jar
如果测试有内存问题,在java运行环境加 -Xmx1024M
测试用例如下:


/**
 * @author NieLei E-mail:niles2010@live.cn
 * @version create time:2013-7-8 16:25:18
 */




import java.util.Date;
import java.util.Hashtable;
import java.util.Map;


import org.codehaus.jackson.map.ObjectMapper;
import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;


public class TestAllJsonlib {


public TestAllJsonlib() {
buildJsonString();
}


private void buildJsonString() {
Group group = new Group();


for(int i=0;i<200000;i++) {
User user = new User();


user.setId(1L);
user.setName("test" + i);
user.setVendor("class" + i);
user.setImageUrl("img/class.png" + i);
user.setCreator("niles" + i);
user.setInfo("Test user in group" + i);
group.addUser(user);
}
try {
System.err.println("start compare...");
Gson gson = new Gson();


ObjectMapper mapper = new ObjectMapper();


long t0 = 0;
long t1 = System.currentTimeMillis();
String  str = null;


t0 = t1;
str = mapper.writeValueAsString(group);
t1 = System.currentTimeMillis();
System.err.println("jackson serialize object:" + (t1 - t0));


t0 = t1;
str = JSON.toJSONString(group);
t1 = System.currentTimeMillis();
System.err.println("fastjson serialize object:" + (t1 - t0));


t0 = t1;
str = gson.toJson(group);
t1 = System.currentTimeMillis();
System.err.println("Gson serialize object:" + (t1 - t0));


System.err.println("--------------");


t0 = t1;
Group group2 = mapper.readValue(str, Group.class);
t1 = System.currentTimeMillis();
System.err.println("jackson parse object:" + (t1 - t0));


t0 = t1;
Group group0 = JSON.parseObject(str,Group.class);
t1 = System.currentTimeMillis();
System.err.println("fastjson parse object:" + (t1 - t0));


t0 = t1;
Group group1 = gson.fromJson(str, Group.class);
t1 = System.currentTimeMillis();
System.err.println("Gson parse object:" + (t1 - t0));




} catch(Exception ex) {
ex.printStackTrace();
}




}
/**
 * @param args
 */
public static void main(String[] args) {
new TestAllJsonlib();
}


}




class User {


private Long id;
private String name;
private String vendor;
private String imageUrl;
private String creator;
private String info;


public Long getId() {
return id;
}


public void setId(Long id) {
this.id = id;
}


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public void setVendor(String vendor) {
this.vendor = vendor;
}


public String getVendor() {
return this.vendor;
}


public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}


public String getImageUrl() {
return this.imageUrl;
}


public String getCreator() {
return creator;
}


public void setCreator(String creator) {
this.creator = creator;
}


public String getInfo() {
return info;
}


public void setInfo(String info) {
this.info = info;
}


}


class Group {
    private Map<String,User> users = new Hashtable<String,User>(); 
    
    private Date updateTime = null;
    public Date getUpdateTime() { return updateTime; }
    public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
 
    public Map<String,User> getUsers() { return users; }
    public void setUsers(Map<String,User> users) { this.users = users; }


    public void addUser(User user) {
    users.put(user.getName(), user);
    }
    
    public User getUser(String name) {
    return users.get(name);
    }
}


结论: 东西好不好,真不用吹啊。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值