知乎:fastjson这么快,为啥老外还是热衷 jackson?
作者:?甘明
來源:https://dwz.cn/ztVmUvBI
知乎上有人提問:fastjson這么快,為啥老外還是熱衷 jackson? 下面是甘明的回答,從各個方面分析了這個問題:
哈哈哈,我來回答這個問題!
因為我實在是對這兩個庫太熟悉了。
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團隊能這么快的反饋并修正問題,這種精神還是值得稱贊的。希望國內的技術從業者能更重視“技術的原始需求”。
你覺得會是什么原因?歡迎在留言區討論。
有道無術,術可成;有術無道,止于術
歡迎大家關注Java之道公眾號
好文章,我在看??
總結
以上是生活随笔為你收集整理的知乎:fastjson这么快,为啥老外还是热衷 jackson?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样在半年内把一个团队带垮?
- 下一篇: 后端程序员必备:索引失效的十大杂症