文档章节

Java序列化与JSON序列化大比拼2(alibaba/fastjson)

NoahX
 NoahX
发布于 2013/03/11 13:36
字数 704
阅读 2919
收藏 6

一、背景

前面发了一篇引起了一些争论(http://my.oschina.net/noahxiao/blog/112759),有人建议alibaba/fastjson不错,我还是继续上次的测试程序加入了alibaba/fastjson的测试实现,来测一

二、测试方式

同前一篇(http://my.oschina.net/noahxiao/blog/112759)中的一样,测试一个Map。

为了基于公平考虑所有JSON解析器,byte[]都将转为String传入解析器。输出json时也是先输出String再getBytes转为byte[]。因为alibaba/fastjson有直接处理byte[]的方法,这里并没有使用。

三、比较对象

Java:

  1. 手写Java(1.6.0_32)
  2. Common Lang3(3.1)的SerializationUtils
JSON:
  1. Gson(2.2.2)
  2. json-smart(2.0-RC2)
  3. alibaba/fastjson(1.1.27)

四、测试结果alibaba/fastjson)

Map大小(10-100)循环10万次

序列化时间比较(y为序列化时间ms)

反序列化时间比较 (y为反序列化时间ms)


序列化时间汇总比较(y为序列化与反序列化总时间ms)


序列化后byte大小比较(由于同类线重合显示为2条线)


Map大小(100-1000)循环1万次

序列化时间比较(y为序列化时间ms)

反序列化时间比较(y为反序列化时间ms)

序列化时间汇总比较(y为序列化与反序列化总时间ms)


序列化后byte大小比较(由于同类线重合显示为2条线)


比较总结

这里只对alibaba/fastjson做一些总结,其它的可以参考前文( http://my.oschina.net/noahxiao/blog/112759)。

Map在小于100时:
fastjson在序列化过程与Gson差不多,Map小于70时优于Gson。
fastjson在反序列化过程表现不错,优于Gson,但还是没有json-smart表现好。

Map在大于100小于1000时:
fastjson在序列化过程出现问题,Map大于300时性能急剧下降,比任何一个序列化都要慢(包括Java)。
fastjson在反序列化过程表现还是很好,并没有随Map的增大而变慢。

总的来说fastjson的反序列化表现很好,但序列化过程并不是太理想,拖了后腿。
在这个测试中fastjson依然没有超过json-smart的性能。

五、测试代码(alibaba/fastjson测试实现

package org.noahx.javavsjson;

import com.alibaba.fastjson.JSON;

import java.io.UnsupportedEncodingException;
import java.util.Map;

/**
 * Created with IntelliJ IDEA.
 * User: noah
 * Date: 3/11/13
 * Time: 10:13 AM
 * To change this template use File | Settings | File Templates.
 */
public class FastJsonSerializationTest implements SerializationTest {
    @Override
    public String getTestName() {
        return "alibaba/fastjson";
    }

    @Override
    public Map<String, Object> testBytes2Map(byte[] bytes) {

        Map<String, Object> map = null;

        try {
            map = (Map<String, Object>) JSON.parse(new String(bytes, "UTF-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return map;
    }

    @Override
    public byte[] testMap2Bytes(Map<String, Object> map) {
        byte[] bytes = null;
        try {
            bytes = JSON.toJSONString(map).getBytes("UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        return bytes;
    }
}

源代码下载:http://sdrv.ms/ZsWomK

P.S.

fastjson在反序列化Map<String,Object>时,value整数大于Integer范围的会转换为BigDecimal。浮点数也会转为BigDecimal。

© 著作权归作者所有

NoahX
粉丝 136
博文 59
码字总数 48419
作品 0
海淀
程序员
私信 提问
加载中

评论(6)

大哥大吧
大哥大吧

引用来自“wenshao”的评论

这个测试不对,你直接测试JavaBean而不是Map看看

温少,能不能出个真对android的。包小点的。现在的包有点大。
wenshao
wenshao
fastjson缺省是做循环引用检测的,你关掉这个再测试。做这个测试,建议你参考这个:https://github.com/eishay/jvm-serializers/wiki
wenshao
wenshao
这个测试不对,你直接测试JavaBean而不是Map看看
wenshao
wenshao
看这里这个:https://github.com/eishay/jvm-serializers
0xTang
0xTang
zhantan
zhantan
感谢博主,最近正在评估这类框架
FastJson---高性能JSON开发包

Fastjson介绍 Fastjson是一个Java语言编写的JSON处理器,由阿里巴巴公司开发。 1、遵循http://json.org标准,为其官方网站收录的参考实现之一。 2、功能qiang打,支持JDK的各种类型,包括基本...

Zero零_度
2015/11/13
469
0
fastjson 发布 1.1.2 版本

fastjson是一个性能极致的json库,fastjson使得json这个文本协议具备二进制协议的性能。 fastjson 1.1.2是一个经过大量测试的版本,这个版本的发布目标就是提升稳定性,修正1.1.0以来因为优化...

wenshao
2011/08/02
1K
10
fastjson-1.1.48.android发布,进一步提升在android环境下的性能

进一步提升在android环境下的性能,同时减少内存占用,恢复Stream API,更好兼容之前的版本,jar大小196k,比上一个版本fastjson-1.1.47.android小1k。 Bug Fixed 修复引起的字段类型为java....

wenshao
2016/04/11
1
0
fastjson 发布 1.1.1 版本,性能大幅提升

之前的一个版本是1.1.0,1.1.0采用asm和SortFastMatch算法提高性能,由于过于着急展示其优越的性能,没有进行严格测试就发布了。 1.1.1相对于1.1.0,这是一个比较稳定的版本了,行测试覆盖率...

wenshao
2011/07/24
3.1K
12
FastJSON 简介及其Map/JSON/String 互转

在日志解析,前后端数据传输交互中,经常会遇到 String 与 map、json、xml 等格式相互转换与解析的场景,其中 json 基本成为了跨语言、跨前后端的事实上的标准数据交互格式。应该来说各个语言...

浮躁的码农
2017/11/06
257
0

没有更多内容

加载失败,请刷新页面

加载更多

gitlab重置管理员密码

登录gitlab服务器 [root@localhost bin]# sudo gitlab-rails console productionLoading production environment (Rails 5.2.3)irb(main):001:0> u = User.where(email: 'admin@example.co......

King华仔o0
33分钟前
3
0
F5公司的负载均衡解决方案在银行中起什么作用?

  F5公司的负载均衡解决方案在银行中起什么作用?今天我们就来探讨一下这个问题。   我是民生银行的,我所在银行采用负载均衡解决方案实现了同城双活数据中心的业务部署和数据中心之间的...

梅丽莎好
45分钟前
4
0
浅谈梯子游戏三门打法技巧走势攻略教程(学会稳稳上岸)

摘要:那么下面我就给大家总结一下技巧和玩法!一、玩梯子的前期准备:1,最重要是zi金准备,提前做好ben金准备能保证自己的zi金链不断,稳中求胜。2,其次是止sun底线,风险控制一定要懂得舍弃,买彩...

V_6696089
今天
9
0
今天发布 需求登记表,不戴眼镜开发的成果

今天是不戴眼镜调理第八天 之前带五百度眼睛0.5 现在是做了三次调理,通常,成人比青少年要慢些 明天正式学习 调理技术 最近不怎么开电脑做开发,发现时间多了许多 虽然想把开发缓一阵子,但...

蒋志祥
今天
4
0
Linux 之docker部署,走过的那些坑

初次使用docker, 多有不足,这里把坑一点点的记下来 概念篇 docker 是什么? 太多文字不同,书读的少, 不懂大大道理; 在我的理解, 它就是个沙箱环境; 在linux中 ,独立进程, 有着自己的小世界 使...

莫库什勒
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部