GSON,FASTJSON,JACKSON的性能比较

测试目的

测试目前用过的三款主流Json引擎的序列化和反序列化性能

序列化:object -> Json

反序列化:Json -> object

测试环境

  • 硬件配置:自己的笔记本电脑,配置如下所示
  • 软件版本:如下所示
<!--fastjson-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.76</version>
        </dependency>
        <!--jack-json-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.5</version>
        </dependency>
        <!--gson-->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.9</version>
        </dependency>

正式测试

测试了序列化和反序列化的时间对比,所用代码如下

序列化测试对比

import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class SerializationTest {

    /**
     * 测试fastjson gson jackson序列化性能
     */
    @Test
    public void test1() throws JsonProcessingException, InterruptedException {
        int[] numbers = new int[]{1, 10, 50, 100, 1000, 10000, 100000, 1000000, 10000000};
        for (int number : numbers) {
            System.out.println("本次测试对象个数:" + number);
            List<User> users = new ArrayList<>();
            for (int j = 0; j < number; j++) {
                User user = new User();
                user.setId(j);
                user.setUsername("张三" + j);
                user.setBirthday(new Date());
                users.add(user);
            }

            SystemMonitor.init();
            TimeUnit.SECONDS.sleep(1);

            //测试gson用时
            System.out.println("使用gson序列化开始");
            Gson gson = new Gson();
            long start = new Date().getTime();
            gson.toJson(users);
            long end = new Date().getTime();
            SystemMonitor.init();
            TimeUnit.SECONDS.sleep(1);
            System.out.println("gson转换共用时:" + (end - start) + "ms");

            //测试fastjson用时
            System.out.println("使用fastjson序列化开始");
            long start1 = new Date().getTime();
            JSON.toJSONString(users);
            long end1 = new Date().getTime();
            SystemMonitor.init();
            TimeUnit.SECONDS.sleep(1);
            System.out.println("fastjson转换共用时:" + (end1 - start1) + "ms");

            //测试jackson用时
            System.out.println("使用jackson序列化开始");
            long start2 = new Date().getTime();
            ObjectMapper mapper = new ObjectMapper();
            mapper.writeValueAsString(users);
            long end2 = new Date().getTime();
            SystemMonitor.init();
            TimeUnit.SECONDS.sleep(1);
            System.out.println("jackson转换共用时:" + (end2 - start2) + "ms\n");
        }
    }

}

测试结果如下:

本次测试对象个数:1
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):4M
总的物理内存:31.86G
剩余的物理内存:15.36G
已使用的物理内存:16.5G
总线程数:9
===========================
使用gson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):12M
总的物理内存:31.86G
剩余的物理内存:15.3G
已使用的物理内存:16.56G
总线程数:10
===========================
gson转换共用时:21ms
使用fastjson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):16M
总的物理内存:31.86G
剩余的物理内存:15.28G
已使用的物理内存:16.58G
总线程数:11
===========================
fastjson转换共用时:122ms
使用jackson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):7.4M
总的物理内存:31.86G
剩余的物理内存:15.27G
已使用的物理内存:16.59G
总线程数:12
===========================
jackson转换共用时:232ms

本次测试对象个数:10
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):11.4M
总的物理内存:31.86G
剩余的物理内存:15.26G
已使用的物理内存:16.6G
总线程数:13
===========================
使用gson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):11.4M
总的物理内存:31.86G
剩余的物理内存:15.29G
已使用的物理内存:16.57G
总线程数:14
===========================
gson转换共用时:2ms
使用fastjson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):11.4M
总的物理内存:31.86G
剩余的物理内存:15.29G
已使用的物理内存:16.57G
总线程数:15
===========================
fastjson转换共用时:0ms
使用jackson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):11.4M
总的物理内存:31.86G
剩余的物理内存:15.29G
已使用的物理内存:16.57G
总线程数:16
===========================
jackson转换共用时:2ms

本次测试对象个数:50
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):11.4M
总的物理内存:31.86G
剩余的物理内存:15.29G
已使用的物理内存:16.57G
总线程数:17
===========================
使用gson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):11.4M
总的物理内存:31.86G
剩余的物理内存:15.29G
已使用的物理内存:16.57G
总线程数:18
===========================
gson转换共用时:8ms
使用fastjson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):11.4M
总的物理内存:31.86G
剩余的物理内存:15.3G
已使用的物理内存:16.56G
总线程数:19
===========================
fastjson转换共用时:1ms
使用jackson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):11.4M
总的物理内存:31.86G
剩余的物理内存:15.3G
已使用的物理内存:16.56G
总线程数:20
===========================
jackson转换共用时:4ms

本次测试对象个数:100
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):11.4M
总的物理内存:31.86G
剩余的物理内存:15.3G
已使用的物理内存:16.56G
总线程数:21
===========================
使用gson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):11.4M
总的物理内存:31.86G
剩余的物理内存:15.3G
已使用的物理内存:16.56G
总线程数:22
===========================
gson转换共用时:9ms
使用fastjson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):11.4M
总的物理内存:31.86G
剩余的物理内存:15.3G
已使用的物理内存:16.56G
总线程数:23
===========================
fastjson转换共用时:1ms
使用jackson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):11.4M
总的物理内存:31.86G
剩余的物理内存:15.3G
已使用的物理内存:16.56G
总线程数:24
===========================
jackson转换共用时:3ms

本次测试对象个数:1000
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):11.4M
总的物理内存:31.86G
剩余的物理内存:15.3G
已使用的物理内存:16.56G
总线程数:25
===========================
使用gson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):11.4M
总的物理内存:31.86G
剩余的物理内存:15.3G
已使用的物理内存:16.56G
总线程数:26
===========================
gson转换共用时:25ms
使用fastjson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):15.4M
总的物理内存:31.86G
剩余的物理内存:15.3G
已使用的物理内存:16.56G
总线程数:27
===========================
fastjson转换共用时:10ms
使用jackson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):15.4M
总的物理内存:31.86G
剩余的物理内存:15.3G
已使用的物理内存:16.56G
总线程数:28
===========================
jackson转换共用时:8ms

本次测试对象个数:10000
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):15.4M
总的物理内存:31.86G
剩余的物理内存:15.3G
已使用的物理内存:16.56G
总线程数:29
===========================
使用gson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):9.1M
总的物理内存:31.86G
剩余的物理内存:15.27G
已使用的物理内存:16.59G
总线程数:30
===========================
gson转换共用时:88ms
使用fastjson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):13.1M
总的物理内存:31.86G
剩余的物理内存:15.27G
已使用的物理内存:16.59G
总线程数:31
===========================
fastjson转换共用时:23ms
使用jackson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):17.1M
总的物理内存:31.86G
剩余的物理内存:15.26G
已使用的物理内存:16.6G
总线程数:32
===========================
jackson转换共用时:14ms

本次测试对象个数:100000
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):29.1M
总的物理内存:31.86G
剩余的物理内存:15.26G
已使用的物理内存:16.59G
总线程数:33
===========================
使用gson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):221.1M
总的物理内存:31.86G
剩余的物理内存:15.11G
已使用的物理内存:16.75G
总线程数:34
===========================
gson转换共用时:443ms
使用fastjson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):301.1M
总的物理内存:31.86G
剩余的物理内存:15.04G
已使用的物理内存:16.82G
总线程数:35
===========================
fastjson转换共用时:142ms
使用jackson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):71.6M
总的物理内存:31.86G
剩余的物理内存:15.01G
已使用的物理内存:16.84G
总线程数:36
===========================
jackson转换共用时:86ms

本次测试对象个数:1000000
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):195.6M
总的物理内存:31.86G
剩余的物理内存:15.01G
已使用的物理内存:16.85G
总线程数:37
===========================
使用gson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):442.9M
总的物理内存:31.86G
剩余的物理内存:14.41G
已使用的物理内存:17.45G
总线程数:38
===========================
gson转换共用时:3392ms
使用fastjson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):680.2M
总的物理内存:31.86G
剩余的物理内存:14.53G
已使用的物理内存:17.33G
总线程数:39
===========================
fastjson转换共用时:922ms
使用jackson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):733.4M
总的物理内存:31.86G
剩余的物理内存:14.37G
已使用的物理内存:17.49G
总线程数:40
===========================
jackson转换共用时:430ms

本次测试对象个数:10000000
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):1645.9M
总的物理内存:31.86G
剩余的物理内存:13.39G
已使用的物理内存:18.47G
总线程数:41
===========================
使用gson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):2628M
总的物理内存:31.86G
剩余的物理内存:10.57G
已使用的物理内存:21.29G
总线程数:41
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):3052M
总的物理内存:31.86G
剩余的物理内存:10.44G
已使用的物理内存:21.42G
总线程数:41
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):3436M
总的物理内存:31.86G
剩余的物理内存:10.07G
已使用的物理内存:21.79G
总线程数:41
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):3852M
总的物理内存:31.86G
剩余的物理内存:9.66G
已使用的物理内存:22.2G
总线程数:41
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):4236M
总的物理内存:31.86G
剩余的物理内存:9.52G
已使用的物理内存:22.33G
总线程数:41
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):4644M
总的物理内存:31.86G
剩余的物理内存:9.49G
已使用的物理内存:22.37G
总线程数:41
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):4444M
总的物理内存:31.86G
剩余的物理内存:9.47G
已使用的物理内存:22.39G
总线程数:41
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):4760M
总的物理内存:31.86G
剩余的物理内存:9.3G
已使用的物理内存:22.56G
总线程数:41
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):5212M
总的物理内存:31.86G
剩余的物理内存:9.3G
已使用的物理内存:22.56G
总线程数:41
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):5640M
总的物理内存:31.86G
剩余的物理内存:9.29G
已使用的物理内存:22.57G
总线程数:41
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):3348M
总的物理内存:31.86G
剩余的物理内存:9.28G
已使用的物理内存:22.58G
总线程数:41
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):3792M
总的物理内存:31.86G
剩余的物理内存:9.28G
已使用的物理内存:22.58G
总线程数:41
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):5460M
总的物理内存:31.86G
剩余的物理内存:8.98G
已使用的物理内存:22.88G
总线程数:41
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):5464M
总的物理内存:31.86G
剩余的物理内存:7.89G
已使用的物理内存:23.97G
总线程数:42
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):5464M
总的物理内存:31.86G
剩余的物理内存:8G
已使用的物理内存:23.86G
总线程数:42
===========================
gson转换共用时:32537ms
使用fastjson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):4915.2M
总的物理内存:31.86G
剩余的物理内存:7.94G
已使用的物理内存:23.92G
总线程数:42
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):3559.2M
总的物理内存:31.86G
剩余的物理内存:7.82G
已使用的物理内存:24.04G
总线程数:42
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):2072.9M
总的物理内存:31.86G
剩余的物理内存:7.73G
已使用的物理内存:24.13G
总线程数:42
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):2704.9M
总的物理内存:31.86G
剩余的物理内存:7.72G
已使用的物理内存:24.14G
总线程数:42
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):3556.9M
总的物理内存:31.86G
剩余的物理内存:7.66G
已使用的物理内存:24.2G
总线程数:42
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):3756.9M
总的物理内存:31.86G
剩余的物理内存:7.59G
已使用的物理内存:24.27G
总线程数:42
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):3881.4M
总的物理内存:31.86G
剩余的物理内存:7.49G
已使用的物理内存:24.37G
总线程数:42
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):3969.4M
总的物理内存:31.86G
剩余的物理内存:7.49G
已使用的物理内存:24.37G
总线程数:42
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):4113.4M
总的物理内存:31.86G
剩余的物理内存:7.48G
已使用的物理内存:24.38G
总线程数:42
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):5792M
总的物理内存:31.86G
剩余的物理内存:7.47G
已使用的物理内存:24.39G
总线程数:42
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):5792M
总的物理内存:31.86G
剩余的物理内存:7.47G
已使用的物理内存:24.39G
总线程数:43
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):5796M
总的物理内存:31.86G
剩余的物理内存:7.47G
已使用的物理内存:24.39G
总线程数:43
===========================
fastjson转换共用时:9760ms
使用jackson序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):2510.5M
总的物理内存:31.86G
剩余的物理内存:7.45G
已使用的物理内存:24.41G
总线程数:43
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):3043.5M
总的物理内存:31.86G
剩余的物理内存:7.42G
已使用的物理内存:24.44G
总线程数:43
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):5322.5M
总的物理内存:31.86G
剩余的物理内存:7.42G
已使用的物理内存:24.44G
总线程数:43
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):7122.5M
总的物理内存:31.86G
剩余的物理内存:7.42G
已使用的物理内存:24.44G
总线程数:44
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:23:01
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):6250.5M
总的物理内存:31.86G
剩余的物理内存:7.42G
已使用的物理内存:24.44G
总线程数:44
===========================
jackson转换共用时:3896ms

反序列化测试对比

测试代码:

import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import org.junit.Test;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class DeserializationTest {
    String[] jsons = new String[]{"src/test/resources/json.json", "src/test/resources/json1.json", "src/test/resources/json2.json"};

    /**
     * 测试gson反序列化
     */
    @Test
    public void testGsonDeserialization() {
        for (int i = 0; i < 3; i++) {
            try {
                System.out.println("使用gson反序列化开始");
                SystemMonitor.init();
                TimeUnit.SECONDS.sleep(1);
                BufferedReader reader = new BufferedReader(new FileReader(jsons[i]));
                String json = reader.readLine();

                // 测试gson的反序列化
                Gson gson = new Gson();
                long start = new Date().getTime();
                List<User> list = gson.fromJson(json, List.class);
                long end = new Date().getTime();
                SystemMonitor.init();
                TimeUnit.SECONDS.sleep(1);
                System.out.println("使用gson:反序列化对象数目:" + list.size() + ", 用时:" + (end - start) + "ms");
            } catch (IOException | InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 测试fastjson反序列化
     */
    @Test
    public void testFastJsonDeserialization() {
        for (int i = 0; i < 3; i++) {
            try {
                System.out.println("使用fastjson反序列化开始");
                SystemMonitor.init();
                TimeUnit.SECONDS.sleep(1);
                BufferedReader reader = new BufferedReader(new FileReader(jsons[i]));
                String json = reader.readLine();
                // 测试fastjson反序列化
                long start1 = new Date().getTime();
                List<User> list1 = (List<User>) JSON.parse(json);
                long end1 = new Date().getTime();
                SystemMonitor.init();
                TimeUnit.SECONDS.sleep(1);
                System.out.println("使用fastjson:反序列化对象数目:" + list1.size() + ", 用时:" + (end1 - start1) + "ms");
            } catch (IOException | InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 测试jackson反序列化
     */
    @Test
    public void testJacksonDeserialization() {
        for (int i = 0; i < 3; i++) {
            try {
                System.out.println("使用jackson反序列化开始");
                SystemMonitor.init();
                TimeUnit.SECONDS.sleep(1);
                BufferedReader reader = new BufferedReader(new FileReader(jsons[i]));
                String json = reader.readLine();
                // 测试jackson反序列化
                ObjectMapper objectMapper = new ObjectMapper();
                long start2 = new Date().getTime();
                List<User> list2 = objectMapper.readValue(json, List.class);
                long end2 = new Date().getTime();
                SystemMonitor.init();
                TimeUnit.SECONDS.sleep(1);
                System.out.println("使用jackson:反序列化对象数目:" + list2.size() + ", 用时:" + (end2 - start2) + "ms");
            } catch (IOException | InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

结果如下:

操作系统:Windows 10
使用gson反序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:38:09
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):8M
总的物理内存:31.86G
剩余的物理内存:16.75G
已使用的物理内存:15.11G
总线程数:10
===========================
使用gson:反序列化对象数目:100, 用时:9ms
使用gson反序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:38:09
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):12M
总的物理内存:31.86G
剩余的物理内存:16.73G
已使用的物理内存:15.13G
总线程数:11
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:38:09
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):20M
总的物理内存:31.86G
剩余的物理内存:16.72G
已使用的物理内存:15.14G
总线程数:12
===========================
使用gson:反序列化对象数目:10000, 用时:35ms
使用gson反序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:38:09
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):20M
总的物理内存:31.86G
剩余的物理内存:16.71G
已使用的物理内存:15.15G
总线程数:13
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:38:09
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):698.1M
总的物理内存:31.86G
剩余的物理内存:15.76G
已使用的物理内存:16.1G
总线程数:14
===========================
使用gson:反序列化对象数目:1000000, 用时:1061ms
程序启动时间:2021-12-24 14:38:09
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):4M
总的物理内存:31.86G
剩余的物理内存:16.81G
已使用的物理内存:15.05G
总线程数:9
===========================
使用fastjson反序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:38:09
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):698.1M
总的物理内存:31.86G
剩余的物理内存:15.76G
已使用的物理内存:16.1G
总线程数:15
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:38:09
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):706.1M
总的物理内存:31.86G
剩余的物理内存:15.76G
已使用的物理内存:16.1G
总线程数:16
===========================
使用fastjson:反序列化对象数目:100, 用时:103ms
使用fastjson反序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:38:09
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):706.1M
总的物理内存:31.86G
剩余的物理内存:15.76G
已使用的物理内存:16.1G
总线程数:17
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:38:09
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):718.1M
总的物理内存:31.86G
剩余的物理内存:15.74G
已使用的物理内存:16.11G
总线程数:18
===========================
使用fastjson:反序列化对象数目:10000, 用时:53ms
使用fastjson反序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:38:09
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):718.1M
总的物理内存:31.86G
剩余的物理内存:15.74G
已使用的物理内存:16.12G
总线程数:19
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:38:09
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):693.4M
总的物理内存:31.86G
剩余的物理内存:15.25G
已使用的物理内存:16.61G
总线程数:20
===========================
使用fastjson:反序列化对象数目:1000000, 用时:1050ms
使用jackson反序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:38:09
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):693.4M
总的物理内存:31.86G
剩余的物理内存:15.24G
已使用的物理内存:16.62G
总线程数:21
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:38:09
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):709.4M
总的物理内存:31.86G
剩余的物理内存:15.22G
已使用的物理内存:16.63G
总线程数:22
===========================
使用jackson:反序列化对象数目:100, 用时:41ms
使用jackson反序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:38:09
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):713.4M
总的物理内存:31.86G
剩余的物理内存:15.22G
已使用的物理内存:16.64G
总线程数:23
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:38:09
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):721.4M
总的物理内存:31.86G
剩余的物理内存:15.21G
已使用的物理内存:16.65G
总线程数:24
===========================
使用jackson:反序列化对象数目:10000, 用时:29ms
使用jackson反序列化开始
操作系统:Windows 10
程序启动时间:2021-12-24 14:38:09
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):725.4M
总的物理内存:31.86G
剩余的物理内存:15.21G
已使用的物理内存:16.65G
总线程数:25
===========================
操作系统:Windows 10
程序启动时间:2021-12-24 14:38:09
cpu核数:12
JAVA_HOME:D:\Java\jdk-16
JAVA_VERSION:16
初始的总内存(JVM):512M
最大可用内存(JVM):8156M
已使用的内存(JVM):1245.4M
总的物理内存:31.86G
剩余的物理内存:14.94G
已使用的物理内存:16.92G
总线程数:26
===========================
使用jackson:反序列化对象数目:1000000, 用时:781ms

总结

序列化时

  • 100个对象转换,gson最快、fastjson其次、jackson最差 b.
  • 10000个对象转换,gson和fastjson耗时几乎一样,jackson最差
  • 100000个对象转换,fastjson最快、jackson其次、gson最差

反序列化时

  • 数目越小,fastjson的速度越慢,gson最快,jackson一般般
  • 数目大时,fastjson最快,gson其次,jackson与gson相差无几

结语

fastjson的性能适用于处理较多对象,jackson波动最小最稳定,gson适合处理较少数据