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/ ...
随机推荐
- GUI学习之二——PyQt控件初识
一.控件概念 控件是一个程序界面上的各个独立的元素, 它具备用户点击.接收用户输入.展示不同内容.存放其他控件等功能. 二.控件分类 常用的控件按功能可以分为以下几种类 按钮 QPushButton— ...
- 用Python语言开发VTK程序的步骤
在Windows环境下用Python语言开发VTK程序 1.安装Python集成开发环境IDLE:下载地址:https://www.python.org/downloads/ 2.然后到VTK官网下载 ...
- python-directory
#!/usr/bin/python # --*-- coding: utf-8 --*-- directory={ "张三":16, "李四":46, &quo ...
- [Hadoop]Hadoop章2 HDFS原理及读写过程
HDFS(Hadoop Distributed File System )Hadoop分布式文件系统. HDFS有很多特点: ① 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复.默认存3份. ② ...
- [gazebo-1] process has died [pid 22855, exit code 255,
[gazebo-1] process has died [pid 22855, exit code 255, cmd /opt/ros/kinetic/lib/gazebo_ros/gzserver ...
- JAVA实现等腰三角形
class Triangle { public static void main(String[] args) { for(int a=0; b<5; a++)//这个代表只有四行 { for( ...
- 打开手机模拟器后adb devices查看不到设备连接
1.找到sdk\platform-tools目录下的adb.exe,将该adb.exe复制到模拟器安装目录下覆盖模拟器自带的adb.exe就可以了.
- 获取window.location.href中传的值,并且转换成json数据使用
做个记录保存一下,以免以后再次用到忘记了. function locVal(){ var url=window.location.href; if (url.indexOf('?')==-1)retu ...
- quartz一次简单应用经历
项目里使用到每月的第一天需要定时统计上一个月的某种数据,这个时候,我开始第一次知道任务调度这么一个专业词汇.也初次了解quartz这个任务调度框架.网上看了好几篇博文,有种quartz越看越难的感觉, ...
- Linux---一级/二级目录以及位置目录名/指令
home目录:普通用户登录进来以后的初始位置(会在home目录下创建一个登录名相同的目录例如 / home / 用户名),如果是超级用户则就是 在根目录 /下的 root目录(也就是 /root) ...