在google搜索后,发现jackson的性能比gson好,我打算在我的项目中用jackson替换gson,但是在运行测试代码时得到了不同的结果。
private static final Type PHOTOLINKS_TYPE_GSON = new TypeToken<List<Photo>>() {}.getType();
private static final Type PHOTOCAPTIONS_TYPE_GSON = new TypeToken<List<String>>() {}.getType();
Gson gson = new Gson();
private void testGson(String photoJson, String captionJson) {
GSON_MON.start();
List<Photo> photos = gson.fromJson(photoJson, PHOTOLINKS_TYPE_GSON);
List<String> photoCaptions = gson.fromJson(captionJson, PHOTOCAPTIONS_TYPE_GSON);
GSON_MON.stop();
}
TypeReference<List<Photo>> PHOTOLINKS_TYPE_JACKSON = new TypeReference<List<Photo>>(){};
TypeReference<List<String>> PHOTOCAPTIONS_TYPE_JACKSON = new TypeReference<List<String>>(){};
ObjectMapper mapper = new ObjectMapper();
private void testJackson(String photoJson, String captionJson) {
JACKSON_MON.start();
try {
List<Photo> photos = mapper.readValue(photoJson, PHOTOLINKS_TYPE_JACKSON);
List<String> photoCaptions = mapper.readValue(captionJson, PHOTOCAPTIONS_TYPE_JACKSON);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
JACKSON_MON.stop();
}
照片是正常的课程:
@JsonIgnoreProperties(ignoreUnknown = true)
private static class Photo implements Serializable {
private static final long serialVersionUID = 5645393489907650496L;
public String small;
public String middle;
public String orign;
public String caption;
public String ow;
public String oh;
}
和照片json是这样的: [{ “ID”: “1318403074887”, “生产地”: “XXX.JPG”, “嗷嗷”:427, “小”: “XXX.JPG”, “中”: “XXX.JPG”, “哦”: 640},{ “ID”: “1318403076793”, “生产地”: “XXX.JPG”, “嗷嗷”:640, “小”: “XXX.JPG”, “中”: “XXX.JPG”,“哦, “:480},{” ID “:” 1318403092168" , “生产地”: “XXX.JPG”, “流”:425, “小”: “XXX.JPG”, “中”: “XXX.JPG”, “OH”:640}]
我使用JAMon监视性能,下面是结果:
似乎gson比jackson更快,gson的平均时间约为2ms而jackson约为16ms,使用jackson时是否会出错?
答案 0 :(得分:5)
性能监视可能是一个简单的问题:看起来你不是通过运行测试足够长时间让它编译字节代码来“预热”JVM等等。通常,在进行测量之前,测试需要至少运行5-10秒。
所以也许先尝试一下,看看数字是如何变化的。我打赌两者的数字都会增加 - 对于小物体,它应该只需要几分之一毫秒。