更新于:2020-04-21

# introduce

各大 json 工具性能对比 wiki

Pascal S. de Kloe edited this page on 9 Jul 2016 · 68 revisions

文章中提到的测试结果测试于 2016 年。

针对不同 json 工具,进行不同数据类型的序列化反序列化测试,并汇总得出相关的性能对比图。

下面贴出几组对比图。

# 二进制数据

# 花费时间对比

# 数据大小对比

# XML/JSON 序列化操作

# 花费时间对比

# 数据大小对比

# 自测

jackson 版本:2.10.0

gson 版本:2.8.5

FastJson 版本:1.2.61

上述 json 性能对比数据,是2016年的测试数据,且不包含某些自身常用的 json 工具类。

基于此原因,自行测试 Gson、Jackson、Fastjson 针对复杂数据和简单数据在 json 数据格式序列化和反序列化的性能,并进行对比。

# 简单对象测试

针对不同样本的对象测试10次,获取平均耗时。

10个对象 100个对象 1000个对象 10000个对象
Gson 序列化耗费 5 ms,
反序列化耗费 3 ms
序列化耗费 12 ms,
反序列化耗费 7 ms
序列化耗费 50 ms,
反序列化耗费 28 ms
序列化耗费 442 ms,
反序列化耗费 157 ms
Jackson 序列化耗费 6 ms,
反序列化耗费 5 ms
序列化耗费 10 ms,
反序列化耗费 12 ms
序列化耗费 25 ms,
反序列化耗费 32 ms
序列化耗费 96 ms,
反序列化耗费 135 ms
Fastjson 序列化耗费 11 ms,
反序列化耗费 3 ms
序列化耗费 28 ms,
反序列化耗费 11 ms
序列化耗费 70 ms,
反序列化耗费 18 ms
序列化耗费 469 ms,
反序列化耗费 99 ms

上述图中,横轴为:10个对象,100个对象,1000个对象,10000个对象,竖轴为序列化+反序列化耗时。

对于简单对象

当数据量较小时, 性能对比 Gson > jackson > FastJson

当数据量较大时, 性能对比 Jackson > Gson > FastJson

# 复杂对象测试

针对不同样本的对象测试10次,获取平均耗时。

较少测试样本量,样本量过大,耗时过长。

10个对象 100个对象 300个对象 600个对象
Gson 序列化耗费 55 ms,
反序列化耗费 32 ms
序列化耗费 396 ms,
反序列化耗费 264 ms
序列化耗费 1032 ms,
反序列化耗费 901 ms
序列化耗费 2161 ms,
反序列化耗费 3325 ms
Jackson 序列化耗费 21 ms,
反序列化耗费 23 ms
序列化耗费 124 ms,
反序列化耗费 133 ms
序列化耗费 332 ms,
反序列化耗费 383 ms
序列化耗费 848 ms,
反序列化耗费 1448 ms
Fastjson 序列化耗费 48 ms,
反序列化耗费 34 ms
序列化耗费 251 ms,
反序列化耗费 241 ms
序列化耗费 697 ms,
反序列化耗费 700 ms
序列化耗费 1553 ms,
反序列化耗费 2607 ms

上述图中,横轴为:10个对象,100个对象,300个对象,600个对象,竖轴为序列化+反序列化耗时。

对于复杂对象

当数据量小时,性能对比 jackSon ≈ fastjson > Gson

当数据量大时,性能对比 jackson > fastjson > Gson

# 总结

在对象较为简单,数据量较小时 Gson 是最优选择。

在对象较为复杂,数据量较小时 FastJson 和 Jackson 是最优选择。

在对象较为复杂,数据量较大时 Jackson 是最优选。

不过 总体来说, 如果必须选择一个 JSON框架作为项目的最优选择,通常选择 Jackson 。 Jackson 在处理大数据量,小数据量,复杂结构和简单结构对象相对性能都会比较好。

精彩内容推送,请关注公众号!
最近更新时间: 4/22/2020, 7:23:53 PM