糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 得到 jason中 string 的值_简单高性能的Json解析器: Jason

得到 jason中 string 的值_简单高性能的Json解析器: Jason

时间:2022-09-12 22:26:11

相关推荐

得到 jason中 string 的值_简单高性能的Json解析器: Jason

最近尝试用Java写了一个Json解析器,支持绑定到类上创建对象. 暂时不想支持很多特性,只想如何最高效地把Json反序列化成对象. 目前成果还比较初步,但初衷已经满足了. 开源出来请大家提出任何意见以继续改进.

/dwing4g/jason​

性能测试程序及版本(均为目前最新发布版本):

Jackson: 2.10.2FastJson: 1.2.62Dsl-Json: 1.9.5Jsoniter: 0.9.23 (含javassist: 3.26.0)Jason: 当前版本(-03-01 16:47:07)

性能测试结果(时间越短越好) (测试环境: AdoptOpenJDK 13.0.2 x64, Win10, 默认JVM参数):

Jackson: 5963ms (使用Afterburner插件实时生成字节码)FastJson: 4196ms (实时生成字节码)Dsl-Json: 3782ms (非生成代码版本,生成代码版本用起来很繁琐,有人测过请在评论中留言)Jsoniter: ms (实时生成代码)Jason: 1732ms (无生成代码,使用高性能反射)

测试一轮(反序列化1000万个对象)的内存分配量:

Jackson: 8016MBFastJson: 4428MBDsl-Json: 1530MBJsoniter: 1374MB (除了反序列化的对象本身之外几乎无开销)Jason: 1374MB (除了反序列化的对象本身之外几乎无开销)

性能测试代码:

import

目前还只是初始版本(只有一千多行代码,支持JDK8及更高版本), Json的解析算法暂时只参考了RapidJSON的数字解析. 后续还会再学习其它实现中的优秀之处.

-02-26 补充一些说明:

上面的性能测试是在AMD的CPU上统计的, 之后在Intel i7的CPU上测出的结果有些出入, 主要是Jsoniter表现得更好了, 结果跟Jason很接近, 不得不佩服Jsoniter的性能.如果有人现在需要生产用途的Json库, 推荐用Jsoniter, 代码质量也比FastJson好不少, 可惜Jsoniter已经有一段时间没更新维护了, 不知道何时出1.0版本.Jsoniter的代码编译使用了Javassist库, 但我认为可以直接调用JDK内置的编译, 做到完全无三方依赖.Jason支持JDK8以上, 但推荐运行在JDK9以上. 因为Jason用了一些JDK9才有的优化, 而且一些底层调用在JDK9以上能更高效地运行.Jason的数字解析参考了目前最快的RapidJSON的实现, 也做了少量Java特定的优化, 最终跟C++版本的性能差距不大了. 比Jsoniter的相关实现快一些.Jason除了支持JSON标准之外, 还支持忽略多余的逗号, 支持不带引号的key. 其它扩展(如注释)的支持待考虑. 另外Jason对不标准的JSON有一定程度的容忍, 但这是快速解析的副作用, 不能当做feature. 另外Jason目前只支持UTF-8编码的字节数组作为输入.Jason支持了动态确定类型的parser. 有两种方法, 一种见其中的Parser类(推荐), 另一种见其中的Pos类.Jason用了很多JDK中Unsafe的调用, 这个是非公开API, 因此不支持Android.Jason还缺乏充足的测试代码, 后续会逐渐补充.Jason后续有打算做序列化功能. 但不确定何时完成.Jason有打算增加文档, 如果有足够关注的话.

-02-27 补充一些说明:

昨天在Intel i7上测试, Jsoniter和Jason的性能差不多. 是5个测试交替顺序测试的, 改成各自测5遍时Jason又明显更快了.hash的乘法系数如果把常量改成变量, 在AMD上性能几乎没区别, 但Intel i7上常量比变量快一些. 暂时设定为常量, 如果有人遇到冲突,那么就自己改常量值或者改为变量吧.Jason目前的版本已经稳定, 在一些重度任务中表现稳定, 暂时没有bug了.

-03-01 补充一些说明:

初步实现了序列化功能(JasonWriter). 整数和浮点数的序列化也参考了RapidJSON的实现(约70%的C++版本性能).

如果觉得《得到 jason中 string 的值_简单高性能的Json解析器: Jason》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。