问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ObjectMapper,别再像个二货一样一直new了!

发布网友 发布时间:2024-09-17 21:40

我来回答

1个回答

热心网友 时间:2024-09-29 10:22

自从国产之光fastjson频频暴雷,jackson json的使用是越来越广泛了。尤其是spring家族把它搞成了默认的JSON处理包,jackson的使用数量更是呈爆炸式发展。

很多同学发现,jackson并没有类似fastjson的JSON.parseObjec这样的,确实看起来很快的方法。要想解析json,你不得不new一个ObjectMapper,来处理真正的解析动作。

这段代码就在CV工程师手中遍地开了花。
这代码有问题么?

你要说它有问题,它确实能正确的执行。你要说它没问题,在追求性能的同学眼里,这肯定是一段十恶不赦的代码。

一般的工具类,都是单例的,同时是线程安全的。ObjectMapper也不例外,它也是线程安全的,你可以并发的执行它,不会产生任何问题。

这段代码,ObjectMapper在每次方法调用的时候,都会生成一个。那它除了造成一定的年轻代内存浪费之外,在执行时间上有没有什么硬伤呢?

new和不new,真的区别有那么大么?

有一次,xjjdog隐晦的指出某段被频繁调用的代码问题,被小伙伴怒吼着拿出证据。

证据?这得搬出Java中的基准测试工具JMH,才能一探究竟。

JMH(the Java Microbenchmark Harness) 就是这样一个能够做基准测试的工具。如果你通过我们一系列的工具,定位到了热点代码,要测试它的性能数据,评估改善情况,就可以交给JMH。它的测量精度非常高,最高可达到纳秒的级别。

JMH是一个jar包,它和单元测试框架JUnit非常的像,可以通过注解进行一些基础配置。这部分配置有很多是可以通过main方法的OptionsBuilder进行设置的。

测试结果如下。

从测试结果可以看出,如果我们每次调用都new一个ObjectMapper,每秒可以执行200万次JSON解析;如果全局使用一个ObjectMapper,则每秒可以执行2000多万次,速度足足快了10倍。

所以在项目中写代码的时候,我们只需要保证有一个全局的ObjectMapper就可以了。

当然,由于ObjectMapper有很多的特性需要配置,你可能会为不同的应用场景分配一个单独使用的ObjectMapper。总之,它的数量不需要太多,因为它是线程安全的。
End

因此,保持良好的编码习惯,使用全局的ObjectMapper。避免频繁new ObjectMapper导致的性能损失。在项目中,合理配置ObjectMapper,可以更高效地处理JSON解析任务,提高程序性能。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
想买红米但没银行卡 开美宜佳便利店是加盟好还是直接转一个美宜佳店好 ...就给你一个交易号,能到美宜佳付款,请问美宜佳是怎样付款的_百度知 ... 用美宜佳代购会不会看到我买的东西 重返帝国弓弩营对诸葛连弩有加成吗 重返帝国城市风格选什么好 重返帝国城市风格选择推荐 重返帝国城市风格怎么切换 重返帝国城市如何切换风格 重返帝国城市风格大全 特色兵种及增益介绍 重返帝国特殊兵种怎么生产-特殊兵种生产攻略 重返帝国怎么训练诸葛弩 转载|json是什么,看了之后我才恍然大悟 java xml转fastjson,转对象 骨头汤怎么造句 安保工作内容 争得面红耳赤造句 苹果ios18怎么升级 ios18什么时候发布 苹果ios18什么时候推送 ios18什么时候可以更新ios18更新时间介绍【详解】 如何导入和导出QQ聊天记录? 如何用电脑导出qq群聊天记录 极米投影仪灯泡寿命 投影仪的使用寿命有多长 使用fastJson将Long类型转成String 安全问题我们需要重视,立刻升级fastjson2 为什么word插入图片显示不出来? JS XML在线格式化、压缩、校验、XML转JSON工具-toolfk程序员工具网 华为手机通知上面有个红色的1怎么去掉 华为手机通知上面有个红色的1怎么去掉? 我借别人的U盘到别人的电脑里拷相片,然后把U盘拿回家时却说是没有格式化... 连接Linux服务器的步骤指南怎么连接linux服务器 Spring Boot实战:整合Redis、MyBatis,封装RedisUtils工具类_百度... 远程连接Linux服务器的指南如何远程linux服务器 linux下使用ssh命令连接另一台linux服务器 服务器使用XFTP快捷连接Linux服务器xftp连接linux 金粉世家怎么造句 一孔之是什么意思 淘宝怎么改背景? DATUM-支持不同格式(JSON,CSV,SQL,XML等)的在线模拟数据生成器 C++实现JSON转换(重点看nlohmann/json的使用) 【098】在线Cron表达式生成器-在线生成Cron,格式化Xml python爬json数据不知道有多少页(2023年最新整理) django有什么装饰器(哪些网站用django做的) m号和xl哪个大 m.l.xl分别代表什么尺码 2XL大还是M号大? 新手怎么正确使用医美面膜? 新真露竹炭酒有后劲吗 韩国的真露竹炭酒喝多少会醉 真露竹碳酒怎么喝