Po przeszukaniu w google, okazało się, że jackson ma lepszą wydajność niż gson, mam zamiar zastąpić gson z jackson w moim projekcie, ale mam inny wynik, gdy uruchomić kod testowy.json analizować wydajność między jackson i 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();
}
Photo to normalna klasa:
@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;
}
i zdjęcia json jest coś takiego: [{ "id": "1318403074887", "BIEGU": "xxx.jpg",” ow ": 427," small ":" xxx.jpg "," middle ":" xxx.jpg "," oh ": 640}, {" id ":" 1318403076793 "," orign ":" xxx.jpg " "ow": 640, "mały": "xxx.jpg", "środkowy": "xxx.jpg", "oh": 480}, {"id": "1318403092168", "orign": "xxx. jpg "," ow ": 425," mały ":" xxx.jpg "," środkowy ":" xxx.jpg "," oh ": 640}]
Używam JAMON do moniter wydajności, poniżej jest wynik:
- szynka Etykieta = Jackson = jednostek MS .: (LastValue = 18,0, Ilość = 30,0, Średnia = 18,4, całkowita = 552,0, min = 13,0, max = 37,0, Aktywne = 0,0, Śr Aktywne = 1,0; Max Active = 1.0)
- Etykieta JAMon = gson, Jednostki = ms .: (LastValue = 4,0, Hity = 30,0, Avg = 2,16666666666666665, Razem = 65,0, Min. = 0,0, Maksimum = 4,0, Aktywne = 0,0, Średnia aktywność = 1.0, Max Active = 1.0)
- Etykieta JAMON = jackson, Jednostki = ms .: (LastValue = 20.0, Hity = 30.0, Avg = 15.166666666666666, Łącznie = 455,0, Min. = 12,0, Maksimum = 25,0, Aktywne = 0,0, Średnia Aktywny = 1,0, maks. Aktywny = 1,0)
- Etykieta JAMon = gson, Jednostki = ms .: (LastValue = 4,0, Hity = 30,0, Avg = 2,2, Łącznie = 66,0, Min. = 0,0, Maksimum = 9,0, Aktywne = 0 . 0, Śr. Aktywny = 1,0, Maks. Aktywny = 1.0)
- Etykieta JAMon = jackson, Jednostki = ms .: (Ostatnia wartość = 19,0, Odsłonięcia = 30.0, Śr = 16,433333333333334, Razem = 493,0, Min. = 11,0, Maks. = 51,0, Aktywny = 0,0, Śr. Aktywny = 1,0, Maks. Aktywny = 1,0)
- Etykieta JAMon = gson, Jednostki = ms .: (LastValue = 2,0, Hity = 30,0, Avg = 1,9, Razem = 57,0, Min. = 0,0, Max = 6.0 Aktywne = 0,0, Średnia Aktywny = 1.0, Max Aktywny = 1,0)
wydaje gson jest bardziej szybciej niż Jackson, średni czas gson wynosi około 2 ms podczas Jackson wynosi około 16ms, czy robię błąd, kiedy używając jackson?
tak, masz rację. ponownie uruchomić test, i monitorować za pomocą nanosekund, Jackson jest szybszy niż gson: JACKSON Wszystkich: 4742510320ns AVG: 4742510ns gson Razem: 13498619947ns, avg: 13498619ns JACKSON Wszystkich: 7667802989ns, avg: 7667802ns gson sumie: 25132581619ns, śr .: 25132581ns – situch
OK, to ma sens. Cieszę się, że się udało! – StaxMan
+1 za te informacje, podobna rzecz przydarzyła mi się i po kilkukrotnym uruchomieniu testu czas wykonania został zmniejszony o współczynnik 4 –