2011-10-12 37 views
6

Sau khi tìm kiếm trong google, thấy rằng jackson có hiệu suất tốt hơn so với gson, tôi có kế hoạch thay thế gson với jackson trong dự án của tôi, nhưng tôi có một kết quả khác khi chạy thử nghiệm mã.json phân tích cú pháp hiệu suất giữa jackson và 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(); 
} 

Ảnh là một lớp học bình thường:

@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; 
} 

và ảnh json là một cái gì đó như: [{ "id": "1318403074887", "orign": "xxx.jpg"," ow ": 427," nhỏ ":" xxx.jpg "," giữa ":" xxx.jpg "," oh ": 640}, {" id ":" 1318403076793 "," orign ":" xxx.jpg " , "ow": 640, "nhỏ": "xxx.jpg", "giữa": "xxx.jpg", "oh": 480}, {"id": "1318403092168", "orign": "xxx. jpg "," ow ": 425," nhỏ ":" xxx.jpg "," trung bình ":" xxx.jpg "," oh ": 640}]

tôi sử dụng JAMon để tính toán hiệu suất, dưới đây là kết quả:

  • JAMON Label = jackson, đơn vị = ms .: (LastValue = 18.0, Hits = 30.0, Avg = 18.4, Total = 552.0, Min = 13.0, Max = 37.0, Active = 0.0, Avg Active = 1.0, Max Active = 1.0)
  • Nhãn JAMON = gson, Đơn vị = ms .: (LastValue = 4.0, Số lần truy cập = 30.0, Trung bình = 2.1666666666666665, Tổng = 65.0, Min = 0.0, Max = 4.0, Hoạt động = 0.0, Trung bình hoạt động = 1.0, Max Active = 1.0)
  • Nhãn JAMON = jackson, Đơn vị = ms .: (LastValue = 20.0, Hits = 30.0, Avg = 15.166666666666666, Tổng = 455.0, Min = 12.0, Max = 25.0, Hoạt động = 0.0, Trung bình Hoạt động = 1.0, Hoạt động tối đa = 1.0)
  • Nhãn JAMON = gson, Đơn vị = ms .: (LastValue = 4.0, Số lần truy cập = 30.0, Trung bình = 2.2, Tổng = 66.0, Min = 0.0, Max = 9.0, Hoạt động = 0 . 0, Hoạt động trung bình = 1.0, Hoạt động tối đa = 1.0)
  • Nhãn JAMON = jackson, Đơn vị = ms .: (LastValue = 19.0, Hits = 30.0, Avg = 16.433333333333334, Total = 493.0, Min = 11.0, Max = 51.0, Hoạt động = 0,0, Hoạt động trung bình = 1,0, Hoạt động tối đa = 1.0)
  • Nhãn JAMON = gson, Đơn vị = ms .: (LastValue = 2.0, Số lần = 30.0, Trung bình = 1.9, Tổng = 57.0, Min = 0.0, Max = 6.0, Hoạt động = 0,0, Hoạt động trung bình = 1.0, Hoạt động tối đa = 1.0)

có vẻ như gson nhanh hơn jackson, thời gian trung bình của gson khoảng 2ms trong khi jackson khoảng 16ms, tôi có mắc lỗi khi sử dụng jackson?

Trả lời

5

Đây có thể là vấn đề đơn giản với giám sát hiệu suất: có vẻ như bạn không "làm nóng" JVM bằng cách chạy thử nghiệm đủ lâu để cho phép biên dịch mã byte và vv. Thông thường các xét nghiệm cần phải được chạy ít nhất trong 5 - 10 giây trước khi thực hiện các phép đo.

Vì vậy, có lẽ hãy thử thực hiện điều đó trước, xem các con số thay đổi như thế nào. Tôi đặt cược số cho cả hai sẽ tăng lên - nó sẽ mất một phần nhỏ của một phần nghìn giây cho các đối tượng nhỏ.

+2

có, bạn đã đúng. tôi chạy kiểm tra một lần nữa, và giám sát sử dụng nano giây, jackson là nhanh hơn so với gson: jackson tổng: 4742510320ns, trung bình: 4742510ns gson tổng: 13498619947ns, trung bình: 13498619ns jackson tổng: 7667802989ns, trung bình: 7667802ns gson tổng: 25132581619ns, avg: 25132581ns – situch

+0

ok tốt, có ý nghĩa. vui mừng nó đã làm việc ra! – StaxMan

+0

+1 cho thông tin này, một điều tương tự đã xảy ra với tôi và sau khi chạy thử nghiệm nhiều lần thời gian thực hiện đã giảm xuống theo hệ số 4 –

Các vấn đề liên quan