开发者社区> 问答> 正文

将String解析成JSONObject这个场景,fastjson2表现没有两倍于fastjson1

我在测试将String解析成JSONObject这个场景,fastjson2表现没有两倍于fastjson1的性能,测试环境:MacBook Pro (13-inch, 2017, Four Thunderbolt 3 Ports) 测试json使用的eishay.json

提问46.png

原提问者GitHub用户chxuan

展开
收起
大圣东游 2023-04-21 12:08:23 253 0
2 条回答
写回答
取消 提交回答
  • 值得去的地方都没有捷径

    编译器优化:性能的提升与编译器的优化有关,不同版本的FastJson可能会被编译器优化的不同,这可能会影响其中一个版本的表现。建议您在测试的时候关闭编译器优化,这样可以减少测试结果的干扰。

    不同版本的FastJson的优化方向不同:FastJson的发展历程很长,发展过程中可能会优化不同方面的功能。例如,FastJson1可能会更加擅长解析较小、相对简单的JSON字符串,而FastJson2可能会更专注于解析大型、更复杂的JSON。可能的情况之一是,eishay.json是一个相对简单的JSON文件,在这种情况下,FastJson2的性能可能不如FastJson1。

    使用正确的API:FastJson2和FastJson1之间也有API的差异,使用不同的API可以影响性能。建议您使用FastJson2推荐的API,比如使用 JSON.parseObject(String text, Class clazz, Feature... features) 代替FastJson1的方式parse(String text)。这样可以发挥FastJson2最高效的解析器,同时也能避免在解析时出现问题。

    减少不必要的操作:解析大型JSON文件比解析小型JSON文件要慢。如果您在测试时使用了大型的JSON文件进行测试,那么这可能会对FastJson2的性能产生影响。建议您测试更小的JSON文件以减少在解析时的时间消耗。

    优化JVM的选项:在某些情况下,通过优化JVM的选项(例如-Xmx和-Xms)可以提高解析速度。如果您的电脑配置允许,可以尝试提高JVM的堆内存和初始堆内存大小并重新运行测试。

    综上所述,建议您在测试Json解析器性能时,遵循一些最佳实践。包括测试场景要尽可能接近实际情况,关闭编译器优化,并使用正确的API,尽可能减少不必要的操作,以及根据需要优化JVM的选项。

    2023-04-21 21:06:30
    赞同 展开评论 打赏
  • 你跑下这个类的main方法,我刚测试的结果:

    https://github.com/alibaba/fastjson2/blob/main/core/src/test/java/com/alibaba/fastjson_perf/eishay/EishayParseTreeStringPretty.java

    Benchmark Mode Cnt Score Error Units EishayParseTreeStringPretty.fastjson1 thrpt 5 647.006 ± 7.090 ops/ms EishayParseTreeStringPretty.fastjson2 thrpt 5 1093.328 ± 7.012 ops/ms EishayParseTreeStringPretty.jackson thrpt 5 708.005 ± 1.783 ops/ms

    原回答者GitHub用户wenshao

    2023-04-21 15:01:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像