开源 JSON 库解析性能对比( Jackson / Json.simple / Gson )

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介:

   Json 已成为当前服务器与 web 应用之间数据传输的公认标准。

   微服务及分布式架构经常会使用 Json 来传输此类文件,因为这已经是 webAPI 的事实标准。

   不过正如许多我们习以为常的事情一样,你会觉得这是理所当然的便不再深入比较。

   我们很少会去想用到的这些 Json 库到底有什么不同,但事实上它们的确是不太一样的。

   因此,我们团队来对常用的三个 Json 库运行测试,看看在解析不同大小文件时哪个库的速度最快。

   在给定的文件大小下,你可以看到不同库之间的解析速度存在着明显的差别。

   高吞吐量的情况下,会频繁传输解析小文件,因此一开始的时候可能性能的差距并不明显。

   但如果你需要在非常高负载下频繁地解析大量的小文件,差距就开始增大了。

   不是所有的 Json 库都叫"特仑苏"。如何根据使用场景才选择正确的库是相当重要的。

1. 选取的开源 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 的编码。

2. 相对条件下的基准测试

   我们同时使用大文件和小文件对这些库进行了基准测试。随着文件大小的不同,处理这些文本所需要的系统资源也会随之上升。

   这个基准测试主要关注两个关键场景:

   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 - 14
  • Json P - 5
  • Jackson -1
  • Json .simple - 0

   Gson 这个冠军还是当之无愧的,Json.simple 第二也没什么悬念。Jackson这轮却是垫底了。

   尽管 Json.simple 没有在任何文件上夺得第一,但总体来看它的解析速度却是排名第二位的。

   还有一个值得注意的是,尽管 Jackson 是这轮最慢的库,但是它在所有文件中的表现都非常一致。

   其它三个库虽然偶然会比 Jackson 快很多,但在另一些文件上的解析速度却是旗鼓相当甚至更差。

3. 最后总结

   解析速度并非衡量一个Json 库的唯一指标,但它的确非常重要。

   通过运行这次基准测试,我们发现没有一个库能在所有文件上击败对手。

   大文件中表现优秀的却在小文件上栽了根头,反之亦然。

如果要从解析速度来看选择哪个库的话还得取决于你的使用场景。

  • 如果你的应用经常会处理大的 Json 文件,那么 Jackson 应该是你的菜。Gson 在大文件上表现得相当吃力。
  • 如果你主要是处理小文件请求,比如某个微服务或者分布式架构的初始化,那么 Gson 当是首选。Jackson 在小文件上的表现则不如人意。
  • 如果这两种文件你都经常会处理到,那么在两轮表现中都位居第二的 Json.simple 对此类场景则更为适合。

    如果你对 Json 库的解析速度比较敏感的话。

   大文件选 Jackson,小文件选GSON,两者则Json .simple。

本文转自Orson博客园博客,原文链接:http://www.cnblogs.com/java-class/p/6653735.html,如需转载请自行联系原作者

相关文章
|
1月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
250 37
|
6天前
|
搜索推荐 Shell
解析排序算法:十大排序方法的工作原理与性能比较
解析排序算法:十大排序方法的工作原理与性能比较
22 9
|
25天前
|
缓存 Java 应用服务中间件
Java虚拟线程探究与性能解析
本文主要介绍了阿里云在Java-虚拟-线程任务中的新进展和技术细节。
|
25天前
|
监控 数据可视化 搜索推荐
万界星空科技商业开源MES系统全面解析
万界星空MES系统支持对生产现场的实时监控,包括设备运行状态、生产进度、质量数据等关键信息的即时反馈。通过可视化的数据展示,管理者能够直观掌握生产全貌,及时发现问题并采取措施
51 5
|
26天前
|
物联网 5G UED
深入解析载波聚合及其对无线通信性能的提升
深入解析载波聚合及其对无线通信性能的提升
43 1
|
2月前
|
弹性计算 负载均衡 数据库
阿里云轻量应用服务器收费标准、性能及适用场景全面解析
阿里云轻量应用服务器(Simple Application Server)作为面向个人开发者、中小企业等用户的入门级云产品,凭借其易用性、高性价比以及一站式服务体验,受到了广泛的欢迎。本文将全面解析阿里云轻量应用服务器的收费标准、最新活动价格以及适用场景,帮助用户更好地了解和选择这一产品。
阿里云轻量应用服务器收费标准、性能及适用场景全面解析
|
2月前
|
机器学习/深度学习 弹性计算 人工智能
阿里云第八代云服务器ECSg8i实例深度解析:性能及适用场景参考
目前企业对云服务器的性能、安全性和AI能力的要求日益提高。阿里云推出的第八代云服务器ECS g8i实例,以其卓越的性能、增强的AI能力和全面的安全防护,除了适用于通用互联网应用和在线音视频应用等场景之外,也广泛应用于AI相关应用。本文将深入解析ECS g8i实例的技术特性、产品优势、适用场景及与同类产品的对比,以供参考。
阿里云第八代云服务器ECSg8i实例深度解析:性能及适用场景参考
|
2月前
|
JavaScript 搜索推荐 前端开发
从零搭建到部署:Angular与Angular Universal手把手教你实现服务器端渲染(SSR),全面解析及实战指南助你提升Web应用性能与SEO优化效果
【8月更文挑战第31天】服务器端渲染(SSR)是现代Web开发的关键技术,能显著提升SEO效果及首屏加载速度,改善用户体验。Angular Universal作为官方SSR解决方案,允许在服务器端生成静态HTML文件。本文通过具体示例详细介绍如何使用Angular Universal实现SSR,并分享最佳实践。首先需安装Node.js和npm。
34 1
|
2月前
|
分布式计算 安全 OLAP
7倍性能提升|阿里云AnalyticDB Spark向量化能力解析
AnalyticDB Spark如何通过向量化引擎提升性能?
|
2月前
|
Java 开发者
别再傻傻分不清!Java if-else与switch的性能对比全解析!
别再傻傻分不清!Java if-else与switch的性能对比全解析!
43 1

推荐镜像

更多