尽管Java 17已经发布近两年,为何众多公司仍然选择使用Java 8?

发表时间: 2023-08-18 10:48

就Google趋势而言,java8全球的使用量仍然高于java17,但是也能够看出来这个态势在不断的改变着,java8的使用量在缓慢的下降中,而java17则在肉眼可见的上涨中

而在着中国,这一趋势的变化并不明显,java8仍然占有较高的市场份额。只不过新项目使用java8的将会越来越少,而老旧的项目需要维护,为防止出现问题,通常人们不会轻易选择升级

java17自2021年月14日发布以来,迄今已经快两年的时间

然而就我从java的官网查询到的信息来看,java8的LTS支持时间一直到2030年,而java17的维护时间一直持续到2029年,也就是说java8比java17结束支持的时间还到晚一年,新版的jdk维护时间一般在8年左右,早期的jdk维护时间往往长达10~20年,比如jdk6,Azul将维护到2026年

Azul是一家专门致力于提供OpenJDK的公司,也就是说这家公司是专门做JVM的地方。在国外其实有很多的openjdk开发商,用于提供免费的JDK,然后收取维护费用,或者与各大厂商合作,比如AZUL就和微软进行合作,在它的云产品上为java项目提供更好的服务

回到主题,以java8来讲,jdk8自从发布的那天到如今已经过去了近10年,中间更新的版本全部都在下图中,可想为一个LTS版本提供长期支持需要花费多大的精力。这里的支持仅仅是维护,而不添加任何的新功能。

java8和java17之间间隔着很多版本,其中最重要的更新是java9的模块化,这在很大程度上对java造成了破坏。也使得人们不会轻易的升级java

我们还是以java LTS版本来谈升级的弊端和优势,先来讲一下什么是LTS LTS的全英文名是 Long-Term-Support Long 长时间,Term 期限,Support 支持的意思。合在一起就是长期支持版本。java8以后的长期支持版本只有java11 和 java17

相比较于java11,继续使用java8可能是个无奈之举,也就是java11开始,Oracle开始对java收费,所以你会看到java11的市场占有量应该是最低的JDK版本,而且相比较于java8,java11也不是特别新,jdk8发布于14年,jdk11发布于18年,这让很多人放弃了更新

相对于java11的失败,oracle也学聪明了,oracle对外宣布java17免费,这也许的确如人所提到的那般,java在不断的走下坡路,而仅仅靠对编程语言收费又能够赚多少钱?免费的jdk无疑是大家开始不断尝试升级的关键,而且2021年相比较于14年的java8已经过去了7年的时间,我们也有理由选择升级

排除收费的因素,人们选择不对java升级的主要因素还是在于稳定性,当系统正常运行的时候,我们没有任何必要干预稳定运行中的系统。事实证明,平台升级总是有风险的,牵一发而动全身,我之前java5升级到6时,就因此JBoss依赖的jdk中的一个api发生了改变,而导致我在升级的过程中花费了不少的时间来排查问题。

更新的java17在特性上也慢慢的开始碾压java8。而且自动springboot官方支持17以后,也会有越来越多的项目开始使用java17编写,只不过相比较于庞大的java8使用人数,这个升级需要时间来一点点的完成,但是我们总是知道java17是一个趋势。java8到java17可能不是无缝的,jdk委员会对jdk进行了很多缝补,删除一些api诸如applet,还有一些api被隐藏了,模块化的出现也破坏了java无缝升级的可能性

从java8到java17我相信会有越来越多的人选择使用java17。但是也应当意识到,新版本的jdk也意味着新的库,我自己的编写的一些应用程序,因为作者一直没有java17版本的,导致我只能使用java8。直到我找到了那个库的替代品,我才选择将jdk升级到java17。因此由平台版本变化而导致的一系列依赖问题才是更加重要的问题。除非我的项目完好无损的升级到新版,功能不会因此而由任何的缺陷

一般而言,在软件界一直流传着这么一句话,一个软件只要能用,就不要轻易的动它。因此对于公司来讲最重要的是什么?是稳定的系统,是收益。如果升级并不能为公司带来最直接的收益,那么极少有公司会冒着风险去升级JDK,毕竟要承担责任的

最后就是java8的维护时长,在前面我们已经谈过,对于绝大多数公司而言,比如我所在的公司。一开始jdk6,直到jdk6宣布不再维护,我们公司才选择升级到jdk7,而在jdk7不再维护以后又升级到8。而对于java17公司持有同样的态度,就是直到当前使用的jdk不维护了,才选择升级。而jdk8维护到2030年,可想而知吧,我估计到我司选择升级jdk的时候,那时候已经到java30多了,java17都已经成为了历史。