在google搜索後,發現jackson比gson有更好的性能,我打算用我的項目中的jackson替換gson,但運行測試代碼時得到了不同的結果。json解析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「,」ow「:425,」small「:」xxx.jpg「,」middle「:」xxx.jpg「,」oh「:640}]
我使用JAMon來監聽性能,結果:
- 火腿標籤=傑克遜,單元數= MS:(LastValue = 18.0,命中= 30.0,平均= 18.4,總= 552.0,最小值= 13.0,最大值= 37.0,活性= 0.0,平均活性= 1.0, MaxActive = 1.0)
- JAMon Label = gson,Units = ms .:(LastValue = 4.0,Hits = 30.0,Avg = 2.1666666666666665,Total = 65.0,Min = 0.0,Max = 4.0,Active = 0.0,Avg Active = 1.0,Max Active = 1.0)
- JAMon Label = jackson,Units = ms .:(LastValue = 20.0,Hits = 30.0,Avg = 15.166666666666666,Total = 455.0,Min = 12.0,Max = 25.0,Active = 0.0,Avg激活= 1.0,最大激活= 1.0)
- JAMon Label = gson,Units = ms .:(LastValue = 4.0,Hits = 30.0,Avg = 2.2,Total = 66.0,Min = 0.0,Max = 9.0,Active = 0 。 0,Avg Active = 1.0,Max Active = 1.0)
- JAMon Label = jackson,Units = ms .:(LastValue = 19.0,Hits = 30.0,Avg = 16.433333333333334,Total = 493.0,Min = 11.0,Max = 51.0,有效= 0.0,平均有效= 1.0,最大有效= 1.0)
- JAMon Label = gson,Units = ms .:(LastValue = 2.0,Hits = 30.0,Avg = 1.9,Total = 57.0,Min = 0.0,Max = 6.0,活性= 0.0,平均主動= 1.0,最大活動= 1.0)
似乎GSON比傑克遜更快捷,GSON的平均時間約爲2毫秒,而傑克遜是約16毫秒,確實我犯錯的時候使用傑克遜?
是的,你是對的。 我再次運行測試,並使用納秒監控, 傑克遜比GSON快: 傑克遜總:4742510320ns,AVG:4742510ns GSON總:13498619947ns,AVG:13498619ns 傑克遜總:7667802989ns,AVG:7667802ns GSON總: 25132581619ns,平均:25132581ns – situch
好吧,這是有道理的。很高興它解決了! – StaxMan
+1這個信息,類似的事情發生在我身上,經過幾次測試後,執行時間減少了4倍 –