为什么FastJson越来越被抵制,不被看好甚至被要求禁用?
项目上,客户方强烈要求严禁使用FastJson,为什么会出现这种情况?曾经风靡一时的FastJson是怎么落到此种田地?
一、首先、为什么之前国内FastJson这么有名声?
(1)序列与反序列速度特别快,暂未发现被其他库所超越;
(2)被阿里大规模使用,且在大量服务器上部署,被业界广泛接受,甚至在2012年被开源中国评选为最受欢迎的国产开源软件之一;
(3)api十分简单,功能也比较全面,支持泛型,支持流处理超大文本 ,支持枚举,支持序列化和反序列化扩展;
二、为什么现在一度被各个正规公司所摒弃?
(1)之前最明显的情况:一个bean的属性包含_(下划线,#开头)之类的属性,序列化时出现属性丢失,也无法再进行反序列化恢复不过听说已经修复这个bug;
(2)查阅源码发现,很多逻辑比较死板,甚至代码写的比较死,兼容性差强人意
(3)fastJson快的核心是使用了substring方法进行json解析,jdk1.7之前,substring方法的实现不会new新对象,这样解析时申请内存次数很少,所以比较快;但是,当解析的json非常多,很容易出现内存泄漏的情况(比如一个几十k的json,如果在对象里引入了里面的一个key,即使这个key只有几个字节,也会导致这几十K的json无法被垃圾回收器回收),这也是快带来的负面效果;
(4)最重要的是jdk1.7以上版本,对substring方法进行了改写,改成了重新new一个string的方式,于是快的优势也就没了;
(5)fastJson就是一个代码质量较差的国产类库,很多逻辑都包含着投机取巧才达到的快,失去了原本该有的兼容性,对json标准遵循也不严格,所以在国际上并不流行,尤其是maven的引用量数值体现的比较明显;
(6)JackSon,速度上不比fastjson慢多少,且兼容性以及逻辑处理更胜一筹;