Json 已成为当前服务器与 web 应用之间数据传输的公认标准。git
微服务及分布式架构常常会使用 Json 来传输此类文件,由于这已是 webAPI 的事实标准。github
不过正如许多咱们习觉得常的事情同样,你会以为这是理所固然的便再也不深刻比较。web
咱们不多会去想用到的这些 Json 库到底有什么不一样,但事实上它们的确是不太同样的。json
所以,咱们团队来对经常使用的三个 Json 库运行测试,看看在解析不一样大小文件时哪一个库的速度最快。服务器
在给定的文件大小下,你能够看到不一样库之间的解析速度存在着明显的差异。架构
高吞吐量的状况下,会频繁传输解析小文件,所以一开始的时候可能性能的差距并不明显。分布式
但若是你须要在很是高负载下频繁地解析大量的小文件,差距就开始增大了。微服务
不是全部的 Json 库都叫"特仑苏"。如何根据使用场景才选择正确的库是至关重要的。工具
选择三个个主流的Json 库来进行基准测试:Jackson, Json .simple,GSON性能
Yidong Fang 的 Json.simple (https://github.com/fangyidong/Json -simple)。Json.simple 是一个 Json 编解码的Java工具库。它旨在打造一个轻量简单且高性能的工具库。
Google 的 Gson (https://github.com/google/gson)。GSON 这个Java库可以在 Java 对象和 Json 间进行相互转换。同时它还提供了对Java泛型的完整支持,并且还不须要你在类上面添加注解。无需添加注解使用起来则更为便捷,同时在没法修改源代码的状况下这仍是一个必要的先决条件。
FasterXML 的 Jackson 项目(https://github.com/FasterXML/jackson)。Jackson 是一个数据处理的工具套件,它的亮点是流式的 Json 解析器及生成器。它是专为Java设计的,同时也能处理其它非 Json 的编码。
咱们同时使用大文件和小文件对这些库进行了基准测试。随着文件大小的不一样,处理这些文本所须要的系统资源也会随之上升。
这个基准测试主要关注两个关键场景:
1.大文件下(190MB)的解析速度与小文件(1KB)下的解析速度。大文件取自这里:https://github.com/zeMirco/sf-city-lots-Json 。
2.小文件是从这里随机生成的:http://www.Json -generator.com/。
不论是大文件仍是小文件,咱们都会用同一个库重复运行10次。
对于每个大文件,咱们都会用同一个库来分别运行10 次。
而对于小文件,在单个库的单次运行中会重复执行10000 次。
在小文件测试的各次迭代中,文件内容都不会驻留在内存里。
Jackson 与 Json .simple 领跑了这轮测试,总体来看 Jackson 又要略优于 Json .simple。
从测试运行的平均结果来看,Jackson 与 Json .simple 在大文件上的表现要优秀。
而 JsonNP 排名第三落后甚远,Gson 更是遥遥垫底。
上表记录的是对每一个文件解析10次的平均时间,总的平均时间见下方。各个库在小文件测试中夺冠的次数以下:
Gson 这个冠军仍是当之无愧的,Json.simple 第二也没什么悬念。Jackson这轮倒是垫底了。
尽管 Json.simple 没有在任何文件上夺得第一,但整体来看它的解析速度倒是排名第二位的。
还有一个值得注意的是,尽管 Jackson 是这轮最慢的库,可是它在全部文件中的表现都很是一致。
其它三个库虽然偶然会比 Jackson 快不少,但在另外一些文件上的解析速度倒是旗鼓至关甚至更差。
解析速度并不是衡量一个Json 库的惟一指标,但它的确很是重要。
经过运行此次基准测试,咱们发现没有一个库能在全部文件上击败对手。
大文件中表现优秀的却在小文件上栽了根头,反之亦然。
若是要从解析速度来看选择哪一个库的话还得取决于你的使用场景。
若是你对 Json 库的解析速度比较敏感的话。
大文件选 Jackson,小文件选GSON,二者则Json .simple。