该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-06-20
JE帐号 写道 刚听说fastjson,请问性能方面和jackson相比如何?
另外,是否支持流输出?用作服务器时,支持流输出,在性能以及减少内存碎片方面还是很有实用价值的. 有测试的,序列化方面,fastjson已经有足够的性能优化了。在parser方面,比jackson快。详见 http://www.iteye.com/post/1812607 |
|
返回顶楼 | |
发表时间:2011-06-20
最后修改:2011-06-20
wenshao 写道 JE帐号 写道 刚听说fastjson,请问性能方面和jackson相比如何?
另外,是否支持流输出?用作服务器时,支持流输出,在性能以及减少内存碎片方面还是很有实用价值的. 支持的,比如: public static final void write(Writer out, Object object) { SerializeWriter writer = new SerializeWriter(); try { JSONSerializer serializer = new JSONSerializer(writer); serializer.write(object); writer.writeTo(out); } catch (IOException ex) { throw new JSONException(ex.getMessage(), ex); } finally { writer.close(); } } 哈,刚看了一下,原来这个fastjson是那个"吹牛:我写的JSONParser可能是这个星球上最快了(Java)"帖子里提到的解析器,不过当时只看了一下题目,以为又是口水帖,直接掠过了... 结果错过了这个好东西!!! 大概看了一下fastjson的wiki,感觉很不错,前一阵为项目找json-lib的替代品时,没有看到这个项目,否则可能就选择它了.哈哈.当时也是比对了好几个,最后才选定jackson,没有其他依赖包,性能好,订制性强,就是太大了,allInOne包有900k+,太疯狂了.fastjson也有以上的优点,体积还小,不过可能就是订制性方面没有jackson强,不过我好像看到最新版的也加入了什么日期时间的格式订制,namefilter和valuefilter什么的,这就比较实用了.我们实际使用中遇到过别人系统的传过来的属性值首字母大写(没法修改,不同语言不同的命名习惯),还有一些密码字段需要加密或忽略的情况,都要求json解析器需要一定的订制能力.总体来说,fastjson应该是够大部分项目使用了.jackson貌似越来越复杂了,支持的内容和特性一堆一堆的,都看不过来. 我随便做了个fastjson和jackson的流输出对比(写了个EmptyWriter),使用jconsole监控了一下,没有什么复杂的jvm预热,也没有自动化跑多次,很简陋的手工启动跑了几次,貌似还是jackson略快一点,内存方面jackson也少一些,不知为什么.测试用的bean类如下,data声明了100000长度,每个元素都是String.valueOf(i); public class VO { private String[] data; public String[] getData() { return data; } public void setData(String[] data) { this.data = data; } } 另外我大概看了一下,流输出的时候,fastjson应该还是先将json拼在SerializeWriter里的char[]了,和我想得流输出还是不太一样,我的想法是转换一部分就向out输出一部分,这样虽然对堆内存没什么影响,但是对于非堆内存应该还是可以节省一些的,另外在遇到的SerializeWriter需要扩容的时候也能再减少一些时间和内存.(这个纯属于想当然,没测试过,纯探讨.) |
|
返回顶楼 | |
发表时间:2011-06-20
JE帐号 写道 wenshao 写道 JE帐号 写道 刚听说fastjson,请问性能方面和jackson相比如何?
另外,是否支持流输出?用作服务器时,支持流输出,在性能以及减少内存碎片方面还是很有实用价值的. 支持的,比如: public static final void write(Writer out, Object object) { SerializeWriter writer = new SerializeWriter(); try { JSONSerializer serializer = new JSONSerializer(writer); serializer.write(object); writer.writeTo(out); } catch (IOException ex) { throw new JSONException(ex.getMessage(), ex); } finally { writer.close(); } } 哈,刚看了一下,原来这个fastjson是那个"吹牛:我写的JSONParser可能是这个星球上最快了(Java)"帖子里提到的解析器,不过当时只看了一下题目,以为又是口水帖,直接掠过了... 结果错过了这个好东西!!! 大概看了一下fastjson的wiki,感觉很不错,前一阵为项目找json-lib的替代品时,没有看到这个项目,否则可能就选择它了.哈哈.当时也是比对了好几个,最后才选定jackson,没有其他依赖包,性能好,订制性强,就是太大了,allInOne包有900k+,太疯狂了.fastjson也有以上的优点,体积还小,不过可能就是订制性方面没有jackson强,不过我好像看到最新版的也加入了什么日期时间的格式订制,namefilter和valuefilter什么的,这就比较实用了.我们实际使用中遇到过别人系统的传过来的属性值首字母大写(没法修改,不同语言不同的命名习惯),还有一些密码字段需要加密或忽略的情况,都要求json解析器需要一定的订制能力.总体来说,fastjson应该是够大部分项目使用了.jackson貌似越来越复杂了,支持的内容和特性一堆一堆的,都看不过来. 我随便做了个fastjson和jackson的流输出对比(写了个EmptyWriter),使用jconsole监控了一下,没有什么复杂的jvm预热,也没有自动化跑多次,很简陋的手工启动跑了几次,貌似还是jackson略快一点,内存方面jackson也少一些,不知为什么.测试用的bean类如下,data声明了100000长度,每个元素都是String.valueOf(i); public class VO { private String[] data; public String[] getData() { return data; } public void setData(String[] data) { this.data = data; } } 另外我大概看了一下,流输出的时候,fastjson应该还是先将json拼在SerializeWriter里的char[]了,和我想得流输出还是不太一样,我的想法是转换一部分就向out输出一部分,这样虽然对堆内存没什么影响,但是对于非堆内存应该还是可以节省一些的,另外在遇到的SerializeWriter需要扩容的时候也能再减少一些时间和内存.(这个纯属于想当然,没测试过,纯探讨.) 我认为你的推断不恰当 |
|
返回顶楼 | |
发表时间:2011-06-21
性能的比较要基于一个前提,就是在实现相同功能的前提下。
朋友介绍这个帖子,所以稍微看了下,又稍微看了下两边的代码。在Jackson中,可以动态添加serializer,在解析javaobject的时候,可以支持annotation,过滤不需要的member等等。 简单以快慢来论没有意义。 |
|
返回顶楼 | |
发表时间:2011-06-21
nijian 写道 性能的比较要基于一个前提,就是在实现相同功能的前提下。
朋友介绍这个帖子,所以稍微看了下,又稍微看了下两边的代码。在Jackson中,可以动态添加serializer,在解析javaobject的时候,可以支持annotation,过滤不需要的member等等。 简单以快慢来论没有意义。 fastjson也有这样的功能啊,不单可以动态添加Serializer,支持Annotation,还可以配置NameFilter、ValueFilter |
|
返回顶楼 | |
发表时间:2011-06-21
wenshao 写道 nijian 写道 性能的比较要基于一个前提,就是在实现相同功能的前提下。
朋友介绍这个帖子,所以稍微看了下,又稍微看了下两边的代码。在Jackson中,可以动态添加serializer,在解析javaobject的时候,可以支持annotation,过滤不需要的member等等。 简单以快慢来论没有意义。 fastjson也有这样的功能啊,不单可以动态添加Serializer,支持Annotation,还可以配置NameFilter、ValueFilter fastjson只是在field上加了annotation,可是jackson不仅支持field,还支持member method,constructor,这里面都包含了不少逻辑。 其实我的意思只是说,单单讨论性能,而不基于功能是不对的。 |
|
返回顶楼 | |
发表时间:2011-06-21
呵呵,jackson那900k+的身材可不是吃素的,太大而全了,要不然现在都开始分包发放了.
fastjson足够好了.不过宣传力度还是不够啊.哈哈 |
|
返回顶楼 | |
发表时间:2011-06-21
什么时候楼主把从json字符串解析到对象分析下
|
|
返回顶楼 | |