测试目前用过的三款主流Json引擎的序列化和反序列化性能
测试环境序列化:object -> Json
反序列化:Json -> object
-
硬件配置:自己的笔记本电脑,配置如下所示
-
软件版本:如下所示
com.alibaba fastjson 1.2.76 com.fasterxml.jackson.core jackson-databind 2.9.5 com.google.code.gson gson 2.8.9
测试了序列化和反序列化的时间对比,所用代码如下
序列化测试对比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 {
@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 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) + "msn");
}
}
}
测试结果如下:
本次测试对象个数:1 操作系统:Windows 10 程序启动时间:2021-12-24 14:23:01 cpu核数:12 JAVA_HOME:D:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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"};
@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 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();
}
}
}
@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 list1 = (List) 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();
}
}
}
@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 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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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:Javajdk-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适合处理较少数据



