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 ...
随机推荐
- iOS 开发UI篇 -- 懒加载学习
1. 懒加载基本 懒加载--也称为延迟加载,即在需要的时候才加载( 效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实 ...
- 个性二维码开源专题<基础篇>
二维码原理介绍: 二维码为什么是黑白相间的?黑色表示二进制的“1”,白色表示二进制的“0” “我们之所以对二维码进行扫描能读出那么多信息,就是因为这些信息被编入了二维码之中.”黄海平说,“制作二维码输 ...
- 重新理解JS的6种继承方式
写在前面 一直不喜欢JS的OOP,在学习阶段好像也用不到,总觉得JS的OOP不伦不类的,可能是因为先接触了Java,所以对JS的OO部分有些抵触. 偏见归偏见,既然面试官问到了JS的OOP,那么说明这 ...
- Bug Tracker 使用笔记(有图有真相)
目的:管理Bug,完善业务流程. 前提条件:BugTracker是基于IIS和SQL Server和Asp.Net的.相当于一个Web端的管理系统. 1.下载地址 http://sourceforge ...
- memcache(一)概述
概述 memcache是一种支持分布式的缓存系统,基于网络连接(当然它也可以使用localhost)方式完成服务,本身它是一个独立于应用的程序或守护进程(Daemon方式). 本地缓存 memcach ...
- 阻塞队列BlockingQueue用法
多线程环境中,通过队列可以很容易实现数据共享,比如经典的“生产者”和“消费者”模型中,通过队列可以很便利地实现两者之间的数据共享. 假设我们有若干生产者线程,另外又有若干个消费者线程.如果生产者线程需 ...
- 使用SVG生成的奔跑吧兄弟的动画效果
在线演示 本地下载 缩放一下在线演示效果窗口,看看不同大小下的动画是不是都显示的非常完美? 体验一下SVG的强大之处吧!
- jQuery实现左移右移
<html> <head> <meta charset="utf-8"> <title>完成左移右移</title> & ...
- 每天一个linux命令(4):mkdir命令
linux mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录. 1.命令格式: mkdir [选项] 目录... 2.命令 ...
- bzoj 2295: 【POJ Challenge】我爱你啊
2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec Memory Limit: 128 MB Description ftiasch是个十分受女生欢迎的同学,所以 ...