fastjson这么快,为啥老外还是热衷 jackson?
点击上方“方志朋”,选择“设为星标”
回复”666“获取新整理的面试资料
作者 | 甘明
来源 | https://urlify.cn/myi6Nv
哈哈哈,我来回答这个问题!
因为我实在是对这两个库太熟悉了。
1、你写个bean,然后属性里分别有包含_(下划线开头、#开头)之类的属性,序列化为json时,出现属性丢失,那么自然你也无法反序列化回来。
这个问题,1.2.14版本以后已经改正。
2、翻阅fastjson的源码,你会发现有很多写死的代码,比如:针对spring之类的框架的各种处理,都是用classload判断是否存在这种类名。
这是什么意思呢?
意思就是如果你用spring的那种思想,自己写了个类似的功能,因为你这个项目里没有spring的那个类,那么用起来就有一堆bug;当然不仅限于这些,还有很多,比如ASM字节码织入部分,看源码的话,能发现的缺点数不胜数。
3、其解析json主要是用的String类substring这个方法,所以解析起来非常“快”,因为申请内存次数很少。
但是因为jdk1.7之前substring的实现并没有new一个新对象,在使用的时候,如果解析的json非常多,稍不注意就会出现内存泄漏(比如一个40K的json,你在对象里引用了里边的一个key,即使这个key只有2字节,也会导致这40K的json无法被垃圾回收器回收),这也是“快”带来的负面效果。
而且这还不算,在jdk1.7以上版本对string的substring方法做了改写,改成了重新new一个string的方式,于是这个“快”的优势也不存在了。
最后,fastjson就是一个代码质量较差的国产类库,用很多投机取巧的的做法去实现所谓的“快”,而失去了原本应该兼容的java特性,对json标准遵循也不严格,自然很难在国际上流行。
json从发明到现在非常流行,并不是因为json快的原因(比json快且小巧的格式和类库一大把),而是因为json和web结合的时候更易于使用,对开发人员易于理解。
很多人拿fastjson和jackson比,就像拿非智能机和iphone比待机时间,其功能性不一样,jackson的很多功能fastjson并没有实现,所以这种对比也不客观。
fastjson之所以没在国际上流行起来,最主要的原因应该是开发者的思路全放到“快”上去了,而偏离了“标准”及功能性,质量也不够好,有点“舍本逐末”的味道。
当然在目前的环境下,国产软件能踏实的心态做好开源的不多,fastjson团队能这么快的反馈并修正问题,这种精神还是值得称赞的。希望国内的技术从业者能更重视“技术的原始需求”。
热门内容:
天天用事务,但是你知道MySQL事务的实现原理吗?
如何优雅的设计java异常
Spring MVC+Spring+Mybatis实现支付宝支付功能(图文详解+完整代码)
互联网公司的中年人都去哪了?
Github 标星 11.5K!这可能是最好的 Java 博客系统
大批 IDEA 激活码到期之后的乱象...
全面了解 Nginx 主要应用场景
为什么微服务一定要有网关?
那些在一个公司死磕了5-10年的人,最后都怎么样了?
最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡
fastjson这么快,为啥老外还是热衷 jackson?相关推荐
- 知乎:fastjson 这么快,为啥老外还是热衷 jackson?
知乎上有人提问:fastjson这么快,为啥老外还是热衷 jackson? 下面是甘明的回答,从各个方面分析了这个问题: 哈哈哈,我来回答这个问题! 因为我实在是对这两个库太熟悉了. 1. 你写个be ...
- 知乎:fastjson这么快,为啥老外还是热衷 jackson?
作者: 甘明 来源:https://dwz.cn/ztVmUvBI 知乎上有人提问:fastjson这么快,为啥老外还是热衷 jackson? 下面是甘明的回答,从各个方面分析了这个问题: 哈哈哈,我 ...
- 放弃FastJson!一篇就够,Jackson的功能原来如此之牛(万字干货)
在上篇<经过多方调研,最终还是决定禁用FastJson!>中,讲了FastJson的基本使用以及存在的不确定性问题,所以最终决定在项目中放弃使用,进而选择市面上比较主流,Spring Bo ...
- 计算机网络技术需要打字快,为啥有人打字非常非常快?我练了十来年还是一 – 手机爱问...
2014-11-28 一个月的考工课 有人知道怎么练英文打字快 1.准确是不可动摇的前提 在前面的章节中我们反复说打字是一种技能,并不是所有的人都可以达到飞速击键的状态,一个打字高手也不可能在历次比赛 ...
- 图解 SQL 中 JOIN 的各种用法
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:CodingStar cnblogs.com/BoyceYa ...
- 大年夜排查bug:竟然是同事把Redis用成这鬼样子,坑了我
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:小木-_- 来源:http://suo.im/61zjWI ...
- 面试官:你能说说MyBatis拦截器原理吗?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:Format cnblogs.com/fangjian042 ...
- 代码神器:拒绝重复编码,这款IDEA插件了解一下.....
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:HeloWxl www.jianshu.com/p/e419 ...
- 观察者模式的Java实现及应用
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:Turwe www.jianshu.com/p/1025f6 ...
最新文章
- 英特尔全栈解决方案,助推人工智能在多领域的落地发展
- Bengio参与、LeCun点赞:图神经网络权威基准现已开源
- 超图数据集管理基本操作 - 隐藏系统字段和添加字段索引
- C语言字符串与中文编码
- 2021云栖大会开源引力峰会重磅发布的战略合作,Grafana服务到底是什么?
- CString .Format
- python读取usb扫码枪数据_vue扫码枪input接收数据
- bcb6通过https接口post数据_Python+Requests+Pytest+YAML+Allure实现接口自动化
- Virtual Treeview 5 0 0的安装以及入门
- uboot加载linux内核加载那些内容,几个地址参数及uboot加载启动内核过程的理解
- YUM只下载软件不安装的设定
- pkcs1与pkcs8格式RSA私钥互相转换
- dcp1608w电脑通过_dcp-1608打印机驱动程序
- qq四国军旗2.1 beat03 builde017记牌器开发思路(二)
- 广义线性模型matlab,使用广义线性模型拟合数据
- 《AutoCAD全套园林图纸绘制自学手册》一2.4 文件管理
- android6.0连接WIFI后显示“已连接,但无法访问互联网”实际可以上网
- U盘系统安装步骤超级简单,弄懂ghost不管是windows7win10都不难
- 解决学术打不开的方法
- Array Shrinking
热门文章
- MySQL:讨人喜欢的 MySQL replace into 用法(insert into 的增强版)
- KBMMW 的日志管理器
- 记录下,我们平时开发当中不得不知道的HTTP状态码
- UVA 10269 Adventure of Super Mario
- 两个asp.net发送邮件类
- 项目经理修炼手册 2.1.2 项目经理的基本功
- 从WEB SERVICE 上返回大数据量的DATASET
- 技术图文:Matlab VS. Numpy 常见矩阵
- 技术图文:如何爬取一个地区的气象数据(上)?
- qtdll在linux系统运行,在QT下编写带DLL的程序