1. 程式人生 > >json解析效能比較(gson與jackson)

json解析效能比較(gson與jackson)

現在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());

測試結果:

資料集     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採用流的處理方式吧。