json解析效能比較(gson與jackson)
阿新 • • 發佈:2019-01-29
現在json的第三方解析工作很多,如json-lib,gson,jackson,fastjson等等。在我們完成一般的json-object轉換工作時,幾乎都沒有任何問題。
但是當資料的量上來時,他們的效能幾何呢?我著手測試了一下gson和jackson,其他的如json-lib效能很差,fastjson雖然效能很好,但是在使用時有些問題,所以這裡就沒有測試。
簡略程式碼:
//生成較大的json
List<JsonObject> list = new ArrayList<JsonObject>();
for (int i = 0; i < 500000; i++) {
JsonObject obj = new JsonObject();
obj.setId(i);
obj.setName("name" + String.valueOf(i));
list.add(obj);
}
Gson gson = new GsonBuilder().create();
String str = gson.toJson(list);
//1,gson解析
long start1 = System.currentTimeMillis();
List l = gson.fromJson(str, new TypeToken<List<JsonObject>>() {
}.getType());
System.out.println("gson time elapse:" + (System.currentTimeMillis() - start1));
System.out.println(l.size());
//2,jackson解析
ObjectMapper mapper = new ObjectMapper();
long start2 = System.currentTimeMillis();
List l2 = mapper.readValue(str, new TypeReference<List<JsonObject>>() {
});
System.out.println("jackson time elapse:" + (System.currentTimeMillis() - start2));
System.out.println(l2.size());
測試結果:
從測試結果可以看出,jackson的效能幾乎是gson的10倍,而且隨著資料的增長,jackson的耗時也都很平穩,而gson則耗時增長明顯,最後直接OOM了,
至於為什麼jackson效能這麼好,我也沒有細究,可能是由於jackson採用流的處理方式吧。
但是當資料的量上來時,他們的效能幾何呢?我著手測試了一下gson和jackson,其他的如json-lib效能很差,fastjson雖然效能很好,但是在使用時有些問題,所以這裡就沒有測試。
簡略程式碼:
//生成較大的json
List<JsonObject> list = new ArrayList<JsonObject>();
for (int i = 0; i < 500000; i++) {
JsonObject obj = new JsonObject();
obj.setId(i);
obj.setName("name" + String.valueOf(i));
list.add(obj);
}
Gson gson = new GsonBuilder().create();
String str = gson.toJson(list);
//1,gson解析
long start1 = System.currentTimeMillis();
List l = gson.fromJson(str, new TypeToken<List<JsonObject>>() {
}.getType());
System.out.println("gson time elapse:" + (System.currentTimeMillis() - start1));
System.out.println(l.size());
//2,jackson解析
ObjectMapper mapper = new ObjectMapper();
long start2 = System.currentTimeMillis();
List l2 = mapper.readValue(str, new TypeReference<List<JsonObject>>() {
});
System.out.println("jackson time elapse:" + (System.currentTimeMillis() - start2));
System.out.println(l2.size());
測試結果:
資料集 gson耗時 Jackson耗時
10w 1366 138
20w 2720 165
30w 4706 332
40w 9526 317
50w 本機OOM 363
從測試結果可以看出,jackson的效能幾乎是gson的10倍,而且隨著資料的增長,jackson的耗時也都很平穩,而gson則耗時增長明顯,最後直接OOM了,
至於為什麼jackson效能這麼好,我也沒有細究,可能是由於jackson採用流的處理方式吧。