我在测试将String解析成JSONObject这个场景,fastjson2表现没有两倍于fastjson1的性能,测试环境:MacBook Pro (13-inch, 2017, Four Thunderbolt 3 Ports) 测试json使用的eishay.json
原提问者GitHub用户chxuan
编译器优化:性能的提升与编译器的优化有关,不同版本的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的选项。
你跑下这个类的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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。