Java 14 都快來(lái)了,為什么還有這么多人固守Java 8?
從Java 9開(kāi)始,Java版本的發(fā)布就讓人眼花繚亂了。
每隔6個(gè)月,都會(huì)冒出一個(gè)新版本出來(lái),Java 10 , Java 11, Java 12, Java 13, 到2020年3月份,Java 14就要來(lái)了。
說(shuō)實(shí)話(huà),這種頻繁的發(fā)布有點(diǎn)兒讓人審美疲勞,每次我看到介紹Java新版本,新特性的文章也沒(méi)興趣點(diǎn)開(kāi)看了。
在這么多的版本中,只有Java 8, Java 11 和未來(lái)的Java 17 是長(zhǎng)期支持版本(LTS),Oracle會(huì)支持3年,其他的只會(huì)支持6個(gè)月,新版本一出,就放棄老版本的技術(shù)支持。
這種快速的發(fā)布有好處嗎?
有 ! 小步快跑一直是我們軟件開(kāi)發(fā)的利器,采用迭代的方式,每次發(fā)布一部分功能,推向開(kāi)發(fā)人員去驗(yàn)證,典型的敏捷思路。
但是這種好處更有利于JDK的開(kāi)發(fā)者,對(duì)使用Java的個(gè)人和公司來(lái)說(shuō),想要跟上每六個(gè)月就要升級(jí)的步伐,實(shí)在是太難了。JDK是個(gè)非常核心的基礎(chǔ)設(shè)施, 除了安全漏洞,誰(shuí)沒(méi)事去升級(jí)生產(chǎn)環(huán)境的JDK啊?出了問(wèn)題誰(shuí)負(fù)責(zé)?
所以,按道理講大家都會(huì)去找那些LTS的版本來(lái)升級(jí),例如Java 11, 但是事實(shí)證明大部分人還在固守Java 8 :
這個(gè)調(diào)查顯示,使用Java 8的公司和程序員高達(dá)80%, 這是為什么呢?大家為什么不升級(jí)到Java 11呢?
我個(gè)人覺(jué)得主要原因是對(duì)開(kāi)發(fā)有利的重大特性升級(jí)很少,吸引力不夠。
在過(guò)去的十幾年中,Java相繼引入的泛型、注解、NIO、函數(shù)式編程等核心功能,極大地影響了應(yīng)用程序開(kāi)發(fā)的方式,你能想象現(xiàn)在的Java中沒(méi)有注解會(huì)是什么樣子嗎?
這幾年的Java版本中,就缺乏這種重大功能的升級(jí)了,我把我有點(diǎn)印象的功能升級(jí)列一下:
注意黑體的這幾項(xiàng), Java 9引入了模塊化系統(tǒng),這是個(gè)看起來(lái)很美的特性,可是對(duì)程序員來(lái)說(shuō),這是一個(gè)破壞性的更新,因?yàn)镴DK做了模塊化,但是很多第三方庫(kù)沒(méi)有做模塊化, 如果想讓自己的項(xiàng)目也模塊化,很有可能是一次不斷填坑的經(jīng)歷,尤其在使用第三方庫(kù)的時(shí)候。
Java 11的ZGC是個(gè)有吸引力的特性,它的設(shè)計(jì)目標(biāo)是:支持TB級(jí)內(nèi)存容量,GC暫停時(shí)間低(<10ms),對(duì)整個(gè)程序吞吐量的影響小于15%,確實(shí)挺讓人激動(dòng)的!如果真的實(shí)現(xiàn)了,程序員就可以可勁兒造對(duì)象,而不用考慮GC了,可惜這仍然是個(gè)實(shí)驗(yàn)性質(zhì)的版本。
至于局部變量類(lèi)型推導(dǎo),也只是方便了變量的聲明而已。
一個(gè)JDK的版本如果想被廣泛采用,一定得能提升開(kāi)發(fā)效率(如泛型、注解),帶來(lái)變革,這樣才有吸引力, 如果給程序員們帶來(lái)了麻煩, 大家就會(huì)用腳投票了。
【本文為51CTO專(zhuān)欄作者“劉欣”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)作者微信公眾號(hào)coderising獲取授權(quán)】