对fastjson、jackson、gson用于反序列化的性能测试

近期要做json字符串的动态序列化,所以对业内常用json序列化包做一次性能测试,再连续测试很多次后得到的结果,对于嵌套类型的反序列化性能排名如下:fastjson > jackson > gson。直接上代码如下:

pom中主要依赖测试坐标如下

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.70</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.6</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.1</version>
        </dependency>
    </dependencies>

 

入口类

package springboot.demo.json;

/**
 * Hello world!
 */
public class AppMain {

    static String json = "{\n" +
            "\"key1\":\"val1abcsdfsdf\",\n" +
            "\"key2\":\"val2abcsdfsdf\",\n" +
            "\"key3\":\"val3abcsdfsdf\",\n" +
            "\"key4\":\"val4abcsdfsdf\",\n" +
            "\"innerKey1\":{\n" +
            "\"key1\":\"val1abcsdfsdf\",\n" +
            "\"key2\":\"val2abcsdfsdf\",\n" +
            "\"key3\":\"val3abcsdfsdf\",\n" +
            "\"key4\":\"val4abcsdfsdf\"\n" +
            "},\"innerKey2\":{\n" +
            "\"key1\":\"val1abcsdfsdf\",\n" +
            "\"key2\":\"val2abcsdfsdf\",\n" +
            "\"key3\":\"val3abcsdfsdf\",\n" +
            "\"key4\":\"val4abcsdfsdf\"\n" +
            "}\n" +
            ",\"innerKey3\":{\n" +
            "\"key1\":\"val1abcsdfsdf\",\n" +
            "\"key2\":\"val2abcsdfsdf\",\n" +
            "\"key3\":\"val3abcsdfsdf\",\n" +
            "\"key4\":\"val4abcsdfsdf\"\n" +
            "}\n" +
            ",\"innerKey4\":{\n" +
            "\"key1\":\"val1abcsdfsdf\",\n" +
            "\"key2\":\"val2abcsdfsdf\",\n" +
            "\"key3\":\"val3abcsdfsdf\",\n" +
            "\"key4\":\"val4abcsdfsdf\"\n" +
            "}\n" +
            ",\"innerKey5\":{\n" +
            "\"key1\":\"val1abcsdfsdf\",\n" +
            "\"key2\":\"val2abcsdfsdf\",\n" +
            "\"key3\":\"val3abcsdfsdf\",\n" +
            "\"key4\":\"val4abcsdfsdf\"\n" +
            "}\n" +
            "}";

    public static void main(String[] args) {

        int count = 1000000;

        AppGson.start(json, count);

        AppFastJson.start(json, count);

        AppJackson.start(json,count);
    }


}

gson

package springboot.demo.json;

import com.google.gson.Gson;
import com.google.gson.JsonObject;

/**
 * Hello world!
 */
public class AppGson {

    static String json = "";

    public static void start(String str, int count) {

        json = str;

        testTimeCostForGson(count);

    }


    public static void testTimeCostForGson(int count) {

        Gson gson = new Gson();

        long start = System.currentTimeMillis();

        for (int i = 0; i < count; i++) {
            JsonObject jo = gson.fromJson(json,JsonObject.class);

            JsonObject joKey4 = jo.getAsJsonObject("innerKey4");

        }

        long end = System.currentTimeMillis();

        System.out.println(String.format("gson count:%s cost time:%s",count, end - start));
    }
}

jackson

package springboot.demo.json;


import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * Hello world!
 */
public class AppJackson {

    static String json = "";

    public static void start(String str, int count) {

        json = str;

        testTimeCostForGson(count);

    }


    public static void testTimeCostForGson(int count) {


        long start = System.currentTimeMillis();

        ObjectMapper mapper = new ObjectMapper();

        for (int i = 0; i < count; i++) {

            try {
                JsonNode o = mapper.readValue(json, JsonNode.class);
                JsonNode node = o.get("innerKey4");

            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }

        }

        long end = System.currentTimeMillis();

        System.out.println(String.format("jackson count:%s cost time:%s", count, end - start));
    }
}

 

fastjson

package springboot.demo.json;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

/**
 * Hello world!
 */
public class AppFastJson {

    static String json = "";

    public static void start(String str, int count) {

        json = str;

        testTimeCostForFastJson(count);

    }

    public static void testTimeCostForFastJson(int count) {

        long start = System.currentTimeMillis();

        for (int i = 0; i < count; i++) {
            JSONObject jo = JSON.parseObject(json);
            JSONObject key4 = jo.getJSONObject("innerKey4");
        }

        long end = System.currentTimeMillis();

        System.out.println(String.format("fastjson count:%s cost time:%s",count, end - start));
    }


}
gson count:1000000 cost time:4228
fastjson count:1000000 cost time:3181
jackson count:1000000 cost time:3308
gson count:1000000 cost time:4371
fastjson count:1000000 cost time:3375
jackson count:1000000 cost time:3566
gson count:1000000 cost time:4193
fastjson count:1000000 cost time:3236
jackson count:1000000 cost time:3542

 

 

 

连续测试很多次后得到的结果,对于嵌套类型的反序列化性能排名如下:fastjson > jackson > gson

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码者人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值