Json解析器性能对比
前言
在两年前曾经做过四种Json解析器的性能对比,现在回头看当时的结果,跟当时的想法还是有很大差异的。
Json-lib、Gson、Jackson、Fastjson性能对比
测试环境如下:
1 | 操作系统:Windows 7 专业版 64位 |
测试结果:
结论
就测试结果来看,性能上Fastjson和Jackson是胜出的,同时也能印证序列化和反序列化的性能不能同时达到最优,要提升其中之一的性能,就必然会牺牲另外一方。
但是json解析的性能就这么重要吗?让我们再从使用的角度比较一下这两家的产品。
编码风格
Jackson出自FasterXML,并且广泛被老外使用,编码风格不用多说。
Fastjson相对来说,使用没有那么广泛,隐藏bug较多。另外类似于序列化配置中出现的硬编码较多。最重要的一点是,Fastjson所推崇的通过大量使用String.substring()方法来避免内存分配,以提高性能的方式,有内存泄露的隐患,而且在JDK1.7以后,该方法仍然会重新申请内存,性能优势不再。
可定制性
仍然是由于使用广泛度的原因,Jackson的可定制性相当强,可以说什么奇奇怪怪的要求都能满足,或者说都有前人已经做好了工作给后人了。而Fastjson仅仅只能通过SerializeFilter类来新增自己的扩展功能,相对来说较为麻烦。
文档
这一点就不吐槽了,阿里开源的产品貌似文档都一般,比较简单不够详细。这可能和阿里对开源的产品还不够重视有关。
在Json解析器的使用上,性能通常不是最关键的因素,但仅仅性能优秀肯定是不够的。总之,这番对比下来,还是选择Jackson最为靠谱。