After searched in google, found that jackson has better performance than gson, i plan to replace gson with jackson in my project, but i got a diffrent result when run test code.
在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();
}
Photo is a normal class:
照片是正常的课程:
@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;
}
and the photo json is something like: [{"id":"1318403074887","orign":"xxx.jpg","ow":427,"small":"xxx.jpg","middle":"xxx.jpg","oh":640},{"id":"1318403076793","orign":"xxx.jpg","ow":640,"small":"xxx.jpg","middle":"xxx.jpg","oh":480},{"id":"1318403092168","orign":"xxx.jpg","ow":425,"small":"xxx.jpg","middle":"xxx.jpg","oh":640}]
照片json是这样的:[{“id”:“1318403074887”,“orign”:“xxx.jpg”,“ow”:427,“small”:“xxx.jpg”,“middle”:“xxx .JPG”, “哦”:640},{ “ID”: “1318403076793”, “生产地”: “XXX.JPG”, “嗷嗷”:640, “小”: “XXX.JPG”, “中”: “XXX.JPG”, “哦”:480},{ “ID”: “1318403092168”, “生产地”: “XXX.JPG”, “嗷嗷”:425, “小”: “XXX.JPG”,“中“:” XXX.JPG”, “哦”:640}]
i use JAMon to moniter the perfomance, below is the result:
我使用JAMon来监控性能,下面是结果:
- JAMon Label=jackson, Units=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)
- JAMon Label = jackson,Units = 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)
- 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 = gson,Units = ms。:( LastValue = 4.0,Hits = 30.0,Avg = 2.166666666666666665,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 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 Active = 1.0,Max Active = 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 = 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, 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,Active = 0.0,Avg Active = 1.0,Max Active = 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, Active=0.0, Avg Active=1.0, Max Active=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,Active = 0.0,Avg Active = 1.0,Max Active = 1.0)
it seems gson is more faster than jackson, the average time of gson is about 2ms while jackson is about 16ms, does i make mistake when using jackson?
似乎gson比jackson更快,gson的平均时间约为2ms,而jackson约为16ms,使用jackson时我犯了错误吗?
1 个解决方案
#1
5
It may be simple issue with performance monitoring: looks like you are not "warming up" JVM by running tests for long enough to let it compile byte code and so on. Typically tests need to be run at least for 5 - 10 seconds before taking measurements.
性能监控可能是一个简单的问题:看起来你不是通过运行测试足够长时间让它编译字节代码来“预热”JVM等等。通常,在进行测量之前,测试需要至少运行5-10秒。
So perhaps try doing that first, see how numbers change. I bet numbers for both will increase -- it should take a fraction of a millisecond for small objects.
所以也许先尝试这样做,看看数字是如何变化的。我打赌两者的数字都会增加 - 对于小物体,它应该只需要几分之一毫秒。
#1
5
It may be simple issue with performance monitoring: looks like you are not "warming up" JVM by running tests for long enough to let it compile byte code and so on. Typically tests need to be run at least for 5 - 10 seconds before taking measurements.
性能监控可能是一个简单的问题:看起来你不是通过运行测试足够长时间让它编译字节代码来“预热”JVM等等。通常,在进行测量之前,测试需要至少运行5-10秒。
So perhaps try doing that first, see how numbers change. I bet numbers for both will increase -- it should take a fraction of a millisecond for small objects.
所以也许先尝试这样做,看看数字是如何变化的。我打赌两者的数字都会增加 - 对于小物体,它应该只需要几分之一毫秒。