Json解析器性能对比

前言

在两年前曾经做过四种Json解析器的性能对比,现在回头看当时的结果,跟当时的想法还是有很大差异的。

Json-lib、Gson、Jackson、Fastjson性能对比

测试环境如下:

1
2
3
4
操作系统:Windows 7 专业版 64位
CPU:Intel(R) Core(TM) i5-6200U CPU @2.30GHz
内存:16G
Java:1.7.0_13

测试代码

测试结果:

结论

就测试结果来看,性能上Fastjson和Jackson是胜出的,同时也能印证序列化和反序列化的性能不能同时达到最优,要提升其中之一的性能,就必然会牺牲另外一方。

但是json解析的性能就这么重要吗?让我们再从使用的角度比较一下这两家的产品。

编码风格

Jackson出自FasterXML,并且广泛被老外使用,编码风格不用多说。

Fastjson相对来说,使用没有那么广泛,隐藏bug较多。另外类似于序列化配置中出现的硬编码较多。最重要的一点是,Fastjson所推崇的通过大量使用String.substring()方法来避免内存分配,以提高性能的方式,有内存泄露的隐患,而且在JDK1.7以后,该方法仍然会重新申请内存,性能优势不再。

可定制性

仍然是由于使用广泛度的原因,Jackson的可定制性相当强,可以说什么奇奇怪怪的要求都能满足,或者说都有前人已经做好了工作给后人了。而Fastjson仅仅只能通过SerializeFilter类来新增自己的扩展功能,相对来说较为麻烦。

文档

这一点就不吐槽了,阿里开源的产品貌似文档都一般,比较简单不够详细。这可能和阿里对开源的产品还不够重视有关。

在Json解析器的使用上,性能通常不是最关键的因素,但仅仅性能优秀肯定是不够的。总之,这番对比下来,还是选择Jackson最为靠谱。