JSON库的使用研究(二)
Java 中哪个 JSON 库的解析速度是最快的?
这个问题有意义吗?各个JSON库的性能差距不大?呵呵,差距大不大,自己往下看吧!
这个问题我们应该分为以下四个维度进行研究:
1.序列化
2.反序列化
3.大数据量
4.小数据量
每个库都会有一些优化的方法,在此我们不做任何优化设置,直接上干货:序列化执行后的结果图:
从上面的测试结果可以看出,序列化次数比较小的时候,Gson性能最好,当不断增加的时候到了100000,Gson明细弱于Jackson和FastJson, 这时候FastJson性能是真的牛,另外还可以看到不管数量少还是多,Jackson一直表现优异。
这是我从别人的测试中参考的,看了作者的代码,每个json的数据量应该不大,应在1K以内。而且gson的处理时间有点线性增长的意思,FastJson和Jackson在这方面有相应优化,这里给赞一个。
下面来一个反序列化的,执行后的结果图:
从上面的测试结果可以看出,反序列化的时候,Gson、Jackson和FastJson区别不大,性能都很优异,而那个Json-lib还是来继续搞笑的。
再看一下另外一个人的测试结果:
大文件下 (190MB) 的解析速度与小文件(1KB)下的解析速度。大文件用同一个。小文件是从这里随机生成的。
不管是大文件还是小文件,我们都会用同一个库重复运行 10 次。对于每一个大文件,我们都会用同一个库来分别运行 10 次。而对于小文件,在单个库的单次运行中会重复执行 10000 次。在小文件测试的各次迭代中,文件内容都不会驻留在内存里,测试所运行的机器是 AWS 的 c3.large 实例。
大文件的完整测试结果如下,我对小文件的结果求了个平均值。
大文件结果
结果相差甚大!Jackson 与 JSON.simple 领跑了这轮测试,整体来看 Jackson 又要略优于 JSON.simple。从测试运行的平均结果来看,Jackson 与 JSON.simple 在大文件上的表现要优秀一些,而 JSONP 排名第三落后甚远,GSON 更是遥遥垫底。
我们再把结果换算成百分比看下。平均来看 Jackson 要胜出一筹。下面是结果的百分比数据,可以从两个维度来进行比较:
不同库之间的性能差别着实不小。
结论:Jackson 以略微优势胜出。JSON.simple 紧随其后,而剩下两个库则远远落后。
小文件结果
上表记录的是对每个文件解析 10 次的平均时间,总的平均时间见下方。各个库在小文件测试中夺冠的次数如下:
- GSON - 14
- JSONP - 5
- Jackson -1
- JSON.simple - 0
这个结果貌似很有说服力。然而,从所有文件的平均结果来看,GSON 这个冠军还是当之无愧的,JSON.simple 和 JSONP 的二三名之争应该没什么悬念。Jackson 这轮却是垫底了。尽管 JSON.simple 没有在任何文件上夺得第一,但总体来看它的解析速度却是排名第二位的。而 JSONP 尽管在许多文件上都拿到了冠军,但平均来看却只拿到了第三名的成绩。
还有一个值得注意的是,尽管 Jackson 是这轮最慢的库,但是它在所有文件中的表现都非常一致,其它三个库虽然偶然会比 Jackson 快很多,但在另一些文件上的解析速度却是旗鼓相当甚至更差。
我们再把这些数字转换成百分比看看,还是同样的两个维度:
和大文件测试相比,这次的差距相对要小一些,但也还是不容忽视的。
JSON库的使用研究(二)的更多相关文章
- JSON库的使用研究(三)
怎么选择JSON库? 从整体测试结果来看,总结如下: 用于序列化.反序列的功能,数量量小,吞吐量不大于10000每秒的,选择gson: 用于解析JSON的,还是用Fastjson吧,虽然听说坑很多. ...
- JSON库的使用研究(一)
最近用到JSON,收集了一些资料,整理如下: 选择一个合适的JSON库要从多个方面进行考虑: 字符串解析成JSON性能 字符串解析成Java Object性能 Java Object转JSON性能 集 ...
- C++的开源跨平台日志库glog学习研究(二)--宏的使用
上一篇从整个工程上简单分析了glog,请看C++的开源跨平台日志库glog学习研究(一),这一篇对glog的实现代码入手,比如在其源码中以宏的使用最为广泛,接下来就先对各种宏的使用做一简单分析. 1. ...
- C++的开源跨平台日志库glog学习研究(三)--杂项
在前面对glog分别做了两次学习,请看C++的开源跨平台日志库glog学习研究(一).C++的开源跨平台日志库glog学习研究(二)--宏的使用,这篇再做个扫尾工作,算是基本完成了. 编译期断言 动态 ...
- 快速上手Unity原生Json库
现在新版的Unity(印象中是从5.3开始)已经提供了原生的Json库,以前一直使用LitJson,研究了一下Unity用的JsonUtility工具类的使用,发现使用还挺方便的,所以打算把项目中的J ...
- 【疯狂造轮子-iOS】JSON转Model系列之二
[疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...
- Fiddler实战深入研究(二)
Fiddler实战深入研究(二) 阅读目录 Fiddler不能捕获chrome的session的设置 理解数据包统计 请求重定向(AutoResponder) Composer选项卡 Filters选 ...
- (转载)Fiddler实战深入研究(二)
原文来源于:http://www.cnblogs.com/tugenhua0707/p/4637771.html,作者:涂根华 !个人觉得文章写的特别好,故收藏于此,感谢原作者的分享 Fiddler实 ...
- json库的编译方法和vs2010中导入第三方库的方法
json库的编译方法和vs2010中导入第三方库的方法 一.去相应官网下载json.cpp文件 Jsoncpp下载:https://sourceforge.net/projects/jsoncpp/ ...
随机推荐
- linux学习第十五天 (Linux就该这么学) 找到一本不错的Linux电子书,附《Linux就该这么学》章节目录
今天收尾DNS内容复习了,还有分享解析配置,都没有记,主要访问同一个域名,就近访问,
- MySQL设置global变量和session变量
1.在MySQL中要修改全局(global)变量,有两种方法: 方法一,修改my.ini配置文件,如果要设置全局变量最简单的方式是在my.ini文件中直接写入变量配置,如下图所示.重启数据库服务就可以 ...
- python 环境变量设置PYTHONPATH
PYTHONPATH是Python搜索路径,默认我们import的模块都会从PYTHONPATH里面寻找. 打印PYTHONPATH: import os print sys.path >['' ...
- Qt打包发布exe
1.首先以 release 方式编译源代码,然后将生成的a. exe 程序放到一个单独的文件夹中. 2.再从开始菜单打开 Qt 命令行工具. 3.在命令行中,进入到第一步中a. exe 程序所在的文件 ...
- 第47章:MongoDB-用户管理
①用户管理 在MongoDB里面默认情况下只要是进行连接都可以不使用用户名与密码,因为要想让其起作用,则必须具备以下两个条件: ·条件一:服务器启动的时候打开授权认证: ·条件二:需要配置用户名和密码 ...
- 安装php rabbitmq扩展,继上一篇安装Rabbitmq
1 安装 rabbitmq-c,C 与 RabbitMQ 通信需要依赖这个库,这里只贴出正确的步骤,错误类型太多,不一一举例,大部分都是安装问题,缺少组件,安装目录问题 git clone git:/ ...
- 正确理解python中的赋值语句:a, b = b, a + b
赋值语句: a, b = b, a + b 相当于: t = (b, a + b) # t是一个tuple a = t[0] b = t[1] 但不必显式写出临时变量t就可以赋值.
- Linux 入门视频教程
http://v.youku.com/v_show/id_XNzM4NTU0MjQ4.html?f=28697585&o=1 1.1.1 Linux系统简介-UNIX发展历史和发行版本http ...
- 基于UML的高校教务管理系统的设计与实现
一.基本信息 标题:基于UML的高校教务管理系统的设计与实现 时间:2018 出版源:南昌航空大学 领域分类:教育信息化:教务管理系统:UML:SSH:Oracle 二.研究背景 问题定义:高校教务管 ...
- robotframework-databaselibrary安装步骤
我这里主要介绍离线安装的方式 第一步:下载robotframework-databaselibrary-0.6 包可以去网上找安装包下载,如果实在找不到可以联系我 第二步:下载PyMySQL-0.9. ...