首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jackson vs json simple for stream parsing

jackson vs json simple for stream parsing
EN

Stack Overflow用户
提问于 2013-04-20 20:49:05
回答 1查看 11.1K关注 0票数 4

我在github https://github.com/jillesvangurp/jsonj上有一个json库。

这个库有一个基于json simple的解析器,它使用一个处理程序类来完成创建我的库中的JsonObject、JsonArray和JsonPrimitive实例的所有工作。

我看到人们发布了各种基准测试,表明jackson解析器在性能方面几乎和它一样好,而json simple是速度较慢的选项之一。因此,为了看看是否可以提高性能,我创建了一个替代解析器,该解析器使用jackson流API,并调用与原始解析器相同的处理程序。从功能的角度来看,这很好用,而且非常简单。

您可以在此处找到相关的类(JsonHandler、JsonParser和JsonParserNg):https://github.com/jillesvangurp/jsonj/tree/master/src/main/java/com/github/jsonj/tools

然而,在我运行的各种测试中,我没有看到任何改进。

所以,我的问题是:我是否应该看到任何改善,如果是的话,为什么?在我看来,至少在流式API模式下,这两个库具有相似的性能。

我对其他人在这方面的经验非常感兴趣。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-22 03:48:14

我不久前写了"On proper performance testing of Java JSON processing“,列举了我在性能基准测试中看到的常见问题。有很多相对简单的方法来搞乱比较。我假设你没有犯任何提到的错误,但值得一提的是。特别是关于使用原始输入的部分:很少有实际的JSON数据是以String形式出现的--因此请确保使用InputStream / OutputStream (或字节数组)。

第二件要注意的事情是,如果您使用树模型(如JsonObject),您已经增加了许多潜在的可避免的开销:您正在构建一个Map/List结构,该结构使用POJO将使用的3倍内存;并且操作起来更慢。在这种情况下,实际解析/生成开销通常是少数组件。有时树型处理是有意义的,这是可以接受的开销。

因此,如果性能非常重要,通常是以下两种之一:

  1. 使用流应用编程接口构建您自己的对象--而不是内存中的树,或者
  2. 使用与POJO之间的数据绑定。这可以接近(1)

的速度

这两种方法都比构建树(在某种程度上,序列化)更快。出于某种原因,许多开发人员认为处理树表示是处理数据的最有效的方法--事实并非如此,在https://github.com/eishay/jvm-serializers等基准测试中也可以看到这一点

我没有通过链接看到与Jackson相关的代码,所以我假设它可以像预期的那样工作。主要要看的(wrt性能问题)实际上是:

  1. 始终关闭JsonParserJsonGenerator (某些回收需要)和
  2. 重用JsonFactory和/或ObjectMapper实例:它们是线程安全的,某些组件(符号表、序列化程序)的重用是通过这些对象进行的。如前所述,如果可能,请始终使用大多数原始输入/输出目标(d24、
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16120560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档