Gson 和 FastJson 性能测试
使用版本:
compile 'com.google.code.gson:gson:2.7'
compile 'com.alibaba:fastjson:1.2.17'
评测样板为一个People数组,People对象 中包含一个Food对象引用。各个字符串采用随机数模拟;尽量模拟列表请求数据。
String mString = "abcdefghijklmnopqrstuvwxyz0123456789";
Random mRandom = new Random();
public List<People> createPeopleList(int n){
List<People> list = new ArrayList<>();
for (int i=; i< n ; i++){
list.add(createPeople());
}
return list;
}
public People createPeople(){
People people = new People();
people.name = getRandomString();
people.age = Math.abs(mRandom.nextInt()) % ;
people.food = createFood();
return people;
}
public Food createFood(){
Food food = new Food();
food.name = getRandomString();
food.num = Math.abs(mRandom.nextInt()) % ;
food.price = Math.abs(mRandom.nextInt()) % ;
return food;
}
public String getRandomString(){
int size = Math.abs(mRandom.nextInt()) % ;
String str = "";
int len = mString.length();
for(int i=; i< size; i++){
str += mString.charAt(Math.abs(mRandom.nextInt()) % len);
}
return str;
}
评测Demo:
public String testToJson(int n){
mText = "";
List list = createPeopleList(n);
long startTime = System.currentTimeMillis();
Gson gson = new Gson();
long initTime = System.currentTimeMillis();
String gsonStr = gson.toJson(list);
long parseTime = System.currentTimeMillis();
String gsonTime = "gson to initTime: "+(initTime - startTime) +" parse: "+(parseTime - initTime);
startTime = System.currentTimeMillis();
String fastStr = JSON.toJSON(list).toString();
parseTime = System.currentTimeMillis();
String fastTime = "fast to parse: "+(parseTime - startTime);
mText = gsonTime + "\n" + fastTime;
// Log.d("tag", gsonStr);
// Log.d("tag", fastStr);
return gsonStr;
}
public Object testFromJson(String str){
List<People> list = new ArrayList<>();
long startTime = System.currentTimeMillis();
Gson gson = new Gson();
long initTime = System.currentTimeMillis();
list = gson.fromJson(str, list.getClass());
long parseTime = System.currentTimeMillis();
String gsonTime = "gson from initTime: "+(initTime - startTime) +" parse: "+(parseTime - initTime);
startTime = System.currentTimeMillis();
list = JSON.parseObject(str, list.getClass());
parseTime = System.currentTimeMillis();
String fastTime = "fast from parse: "+(parseTime - startTime);
mText += "\n"+gsonTime + "\n" + fastTime;
return list;
}
评测机型:360 型号1503-M02, 处理器:helio X20 十核处理器, 内存4G, 系统6.0, 内核版本3.18.22+
输出数据:
Size 大小 GSON toJson FastJson toJson GSON fromJson FastJson parseJson 单位(ms)
20 25 39 6 3
30 39 6 2
27 40 6 3
200 22 15 12 11
23 16 13 12
22 15 11 12 2000 116 87 43 61
128 83 72 89
120 85 44 73 20000 610 766 596 666
709 793 525 759
530 910 543 773 200000 6875 15394 11551 18811
6803 15419 10050 18718
6756 15217 11338 19507 数据分析:
1、Size 为 20 的时候 数据偏大是因为有静态变量等相关的初始化工作,接下来的 200、2000等因为已经初始化了,所以没有相应增加时间。
2、生成json字符串的速度,2000个对象以内,fastJson 有优势, 20000个数据以上Gson优势比较大
3、解析json字符串的数据, 除了20个样板的极端例子,Gson 的解析性能都有可观的优势。 总结:
1、android开放中,按照以往经验解析json样板 不超过2000, 封装json的样板不超过200,选择Gson有一定优势。
2、FastJson整体表现不如Gson,但是在特定样板大小中,有更好的性能。
3、GitHub上面FastJson更新比Gson更慢
4、建议使用Gson
5、上述样板存在局限,没有覆盖到很多样例,具体项目中,可以实测之后在选择方案。
Gson 和 FastJson 性能测试的更多相关文章
- Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例
Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的 ...
- Gson 与 fastJson 在使用上的差异(fastJson的优点)
一.android 常用的json解析方式 Android 开发上常用的json解析方式有:Gson, fastJson,jackson. 因为jackjson jar包会比较大点(700+k),Gs ...
- 各个JSON技术的比较(Jackson,Gson,Fastjson)的对比
JSON技术的调研报告 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包, 包括 ...
- JSON解析工具比较,主要GSON和FastJSON
JSON解析工具比较,主要GSON和FastJSON 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确 ...
- 浅谈Gson和fastjson使用中的坑
相信大家在代码编写中都用过Gson和fastjson吧,用来进行 Java对象和json字符串之间的转换. 本篇文章就主要介绍博主在工作中使用这两款工具时遇到的坑和对应的解决办法. 觉得有用的可以点个 ...
- Android JSON、GSON、FastJson的封装与解析
声明: 1.本帖只提供代码,不深入讲解原理.如果读者想要深入了解,那就不要在这个帖子上浪费时间了 2.客户端用的是Google官方的Volley访问服务器,具体了解Volley请戳 这里 3.本帖三种 ...
- Gson 和 Fastjson 你不知道的事
背景 目前在公司负责的业务, 主要是跟JSON数据打交道, fastjson .gson都用, 他们适用于不同场景.fastjson号称是业界处理json效率最高的框架, 没有之一.但在某些场景下, ...
- Android JSON 解析库的使用 - Gson 和 fast-json
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族 ...
- gson和fastjson将json对象转换成javaBean 简单对照
今天在网上看代码时,发现项目使用了Gson,用于将json字符串转换成javaBean. 以前没使用过Gson,随即,简单入了个们, 想起fastjson也有将json字符串转换成javaBean的A ...
随机推荐
- 融云官方cordova示例使用指南
最近公司要在App里加IM功能,用融云IM.于是下载其cordova版示例:https://github.com/rongcloud/cordova-plugin-rongcloud-im-demo ...
- hdu 5098 双队列拓扑排序
http://acm.hdu.edu.cn/showproblem.php?pid=5098 软件在安装之后需要重启才能发挥作用,现在给你一堆软件(有的需要重启有的不需要)以及安装这个软件之前需要哪些 ...
- Eclipse程序员要掌握的常用快捷键
Ctrl+K 光标放在一个变量上(注意,是变量,如果你的光标放在了字符串上,如http://keleyi.com则没有任何作用的),按下Ctrl+K光标会定位到下一个相同的变量 Shift+Ctrl+ ...
- IQueryable和IQueryProvider初尝
前言 相信大家对Entity Framework一定不陌生,我相信其中Linq To Sql是其最大的亮点之一,但是我们一直使用到现在却不曾明白内部是如何实现的,今天我们就简单的介绍IQueryabl ...
- solr与.net系列课程(九)solr5.1的配置
solr与.net系列课程(九)solr5.1的配置 最近一些园友来咨询solr5.1的配置方式,然后我就去官网下载了个最新版本的solr,发现solr5.0以后solr的下载包里的内容发生的变化,移 ...
- [ALM]一步一步搭建MS ALM环境 - 安装域服务器
描述: 搭建并配置域服务器,先安装操作系统,配置网络,安装组件,配置域帐号 步骤: 1,打开Hyper-V Manager,参考[Hyper-V]使用操作系统模板创建新的虚拟机,先完成操作系统的安装, ...
- 使用SharePoint CSOM 编写高效的程序
上一篇文章中简单的介绍了使用CSOM进行编程.今天主要讲一下CSOM使用中一些小技巧,可以让你的程序运行的更快. 单独加载某些属性 在上文中的例子,需要返回Web对象信息的时候,我们使用了如下的代码: ...
- C#与数据库访问技术总结(六)之Command对象创建SQl语句代码示例
Command对象创建SQl语句代码示例 说明:前面介绍了 Command 对象的方法和一些属性,回顾一下 Command对象主要用来执行SQL语句.利用Command对象,可以查询数据和修改数据. ...
- struts2学习笔记之二:基本环境搭建
学习struts2有一段时间了,作为一个运维人员学习的时间还是挺紧张的,写这篇文件为了方便以后复习时使用 环境: MyEclipse 10 tomcat6 jdk1.6 首先建立一个web项目,并 ...
- Nodejs学习笔记(十)--- 与MongoDB的交互(mongodb/node-mongodb-native)、MongoDB入门
目录 简介 MongoDB安装(windows) MongoDB基本语法和操作入门(mongo.exe客户端操作) 库操作 插入 查询 修改 删除 存储过程 nodejs操作MongoDB 插入 查询 ...