org.json与fastjson与gson的倾向于解析速度的性能测试
首先,要PK的这三个都是json解析与生成的类库. 上次那篇文章可能写的太初级或有主观情绪在里面,导致没有人愿意帮我做出更好的指导. 我这次学了一点点专业级性能测试的皮毛,打算做客观的基准测试. 每一种基准测试都必须严格做出限定条件,得出足够窄的某一面的结论. 我这里限定了如下条件:
要达到的几个测试目标有:
测试结果是fastjson > gson > org.json; fastjson : (前面摘取: 189670,218408),(平均值摘取: 4170,4453); 以下是测试代码: import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;
import org.json.JSONObject;
public class JsonTestAgain {
private static final Gson gson = new Gson();
private static final int iterTimes = 20000000;
private static long avgTime = 0L;
public static void main(String[] args) {
String json = "{"id":109394012,"name":"zhangsan","school":"renmindaxue","age":24,"isFemale":false,"area":"beijing","city":"beijing","address":"changping","phone":"13100049348","email":"xxx@163.com","isMarried":true,"beginDate":"2009-01-01","beginCompany":"pingan","height":178,"weight":200,"style":1,"leaveDate":"2010-01-01","mrRight":{"id":1093079412,"name":"meinv","age":21,"isFemale":true,"phone":"13149348000","email":"zzz@163.com","beginDate":"2007-09-01","beginCompany":"nuoya","height":160,"weight":100,"style":2,"leaveDate":"2012-11-01"}}";
JohnTestData data = new JohnTestData();
data.mrRight = new JohnTestData();
for (int i = 0; i < 1000; i++) {
System.out.println(uSEOrgJson(json,data));
}
avgTime = uSEOrgJson(json,data);
for (int i = 0; i < iterTimes; i++) {
avgTime += uSEOrgJson(json,data);
avgTime = avgTime / 2;
}
System.out.println("============================");
System.out.println(avgTime);
}
private static long uSEOrgJson(String json,JohnTestData right) {
long start = System.nanoTime();
JSONObject left = new JSONObject(json);
right.address = left.getString("address");
right.age = left.getInt("age");
right.area = left.getString("area");
right.beginCompany = left.getString("beginCompany");
right.beginDate = left.getString("beginDate");
right.city = left.getString("city");
right.email = left.getString("email");
right.height = left.getInt("height");
right.id = left.getLong("id");
right.isFemale = left.getBoolean("isFemale");
right.isMarried = left.getBoolean("isMarried");
right.leaveDate = left.getString("leaveDate");
right.name = left.getString("name");
right.phone = left.getString("phone");
right.weight = left.getInt("weight");
right.school = left.getString("school");
right.style = left.getInt("style");
JSONObject object = left.getJSONObject("mrRight");
right.mrRight.address = object.getString("address");
right.mrRight.age = object.getInt("age");
right.mrRight.area = object.getString("area");
right.mrRight.beginCompany = object.getString("beginCompany");
right.mrRight.beginDate = object.getString("beginDate");
right.mrRight.city = object.getString("city");
right.mrRight.email = object.getString("email");
right.mrRight.height = object.getInt("height");
right.mrRight.id = object.getLong("id");
right.mrRight.isFemale = object.getBoolean("isFemale");
right.mrRight.isMarried = object.getBoolean("isMarried");
right.mrRight.leaveDate = object.getString("leaveDate");
right.mrRight.name = object.getString("name");
right.mrRight.phone = object.getString("phone");
right.mrRight.weight = object.getInt("weight");
right.mrRight.school = object.getString("school");
right.mrRight.style = object.getInt("style");
right.mrRight.mrRight = null;
return System.nanoTime() - start;
}
private static long useFastjson(String json,JohnTestData right) {
long start = System.nanoTime();
JohnTestData left = JSON.parSEObject(json,JohnTestData.class);
right.address = left.address;
right.age = left.age;
right.area = left.area;
right.beginCompany = left.beginCompany;
right.beginDate = left.beginDate;
right.city = left.city;
right.email = left.email;
right.height = left.height;
right.id = left.id;
right.isFemale = left.isFemale;
right.isMarried = left.isMarried;
right.leaveDate = left.leaveDate;
right.name = left.name;
right.phone = left.phone;
right.weight = left.weight;
right.school = left.school;
right.style = left.style;
right.mrRight = left.mrRight;
return System.nanoTime() - start;
}
private static long useGson(String json,JohnTestData right) {
long start = System.nanoTime();
JohnTestData left = gson.fromJson(json,JohnTestData.class);
right.address = left.address;
right.age = left.age;
right.area = left.area;
right.beginCompany = left.beginCompany;
right.beginDate = left.beginDate;
right.city = left.city;
right.email = left.email;
right.height = left.height;
right.id = left.id;
right.isFemale = left.isFemale;
right.isMarried = left.isMarried;
right.leaveDate = left.leaveDate;
right.name = left.name;
right.phone = left.phone;
right.weight = left.weight;
right.school = left.school;
right.style = left.style;
right.mrRight = left.mrRight;
return System.nanoTime() - start;
}
}
(JohnTestData.java) public final class JohnTestData {
public long id;
public String name;
public String school;
public int age;
public boolean isFemale;
public String area;
public String city;
public String address;
public String phone;
public String email;
public boolean isMarried;
public String beginDate;
public String beginCompany;
public int height;
public int weight;
public int style;
public String leaveDate;
public JohnTestData mrRight;
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |