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适合处理较少数据