程序员为何抗拒升级至Java 8?

发表时间: 2019-05-09 20:53

【CSDN 编者按】不说 Android,Java 本身都很碎片化。尽管 Java 升级换代,但于开发者来说,还是紧紧地抱着 Java 8 不放。这是为什么呢?一起来看。

作者 | Trisha Gee

译者 | 弯月

责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

以下为译文:

近日的调查结果显示,绝大多数开发人员的主要应用程序中使用的还是 Java 8。

数据来源:https://snyk.io/blog/jvm-ecosystem-report-201

在Java 8之前,用户接受更高版本的Java的过程非常缓慢,特别是在企业中,因为在生产环境中接受新版本Java非常困难。而引入了Lambda表达式和流的Java 8对许多开发人员来说都非常有吸引力。同时,微服务、持续发布实践和更好的自动化测试也让接受新版本语言变得更容易,风险比以前更小。

那么,鉴于这些因素,为什么从Java 9开始每年两次发布新版本的情况下,开发人员还在坚持使用Java 8呢?目前Java最新的版本是Java 12,然而很少有人使用9~12的版本。

估计你能猜到这其中的原因:“很复杂”。Java 8之后的版本发生了很多变化,这可能会导致各个公司在Java升级上举棋不定。

6 个月一次的发布节奏

从2017年9月发布Java 9开始,Oracle每六个月就会发布一个新版本的JDK,具体来说是每年的三月和九月。现在持续发布大行其道,所以一门语言一改以往三年发布一次的做法,转而采用更快的发布速度,这也完全合情合理。

在新的发布节奏下,不会再出现每几年发布一大堆功能的情况(伴随着风险极高的大型升级),而是在预定的日期内推出更小的发布。当然,这些发布包含的功能会少很多,但这种方式有几个好处:

  1. 方便计划。预定的发布节奏不仅方便了语言开发者,也方便使用者制定升级计划。
  2. 更高的质量。更频繁的发布意味着如果某次发布中某个功能没有做好,就会被推迟到下一次发布。因此,语言开发者的压力更小,不需要赶工完成功能,因此每次发布的质量更高。
  3. 稳定的新功能来源。以前是每三年一次巨大的更新,而现在可以持续地获得更新,包括语言特性、垃圾收集器的变化和性能改善。

如此快的发布节奏也可能造成的负面影响,例如许多组织根本跟不上六个月一次的升级节奏。这一点也在考虑中,因为Oracle也会受到这个影响。

长期支持版

Oracle不愿意像以前每三年发布一个版本时那样支持每个旧版本,这样做的成本太高。

如果Oracle每六个月发布的版本都要支持三年,那么在2020年前后他们就要支持六个不同的版本!

相反,他们说每三年会有一个“长期支持的版本”(Long Term Support release,简称LTS),该版本会提供为期三年的支持。Java 8是一个LTS,当前的LTS是Java 11,下一个应该是Java 17。

Oracle每三年选择一个版本提供长期支持和更新,其他版本仅支持六个月。

但是,两个LTS之间的版本在下一个版本发布时就会失去支持。这就是说,Java 10会替代Java 9,而Java 11发布时又会替代Java 10。

开发人员在升级Java 8时一般会直接升级到Java 11。

这就是如今出现这种局面的原因,一般来说,人们不会使用Java 9或10。就算他们用过,应该也都升级到了Java 11。

短期版本应该在新版本发布后立即升级,长期版本会支持至少三年,因此现在有两种主要的升级途径:

  1. 每六个月新版本一出来就升级。这意味着每六个月就要使用最新版本。这样做的好处是能够立即获得新的语言特性,但这种方式通常只适合那些习惯于迅速升级技术栈的人们。
  2. 只升级长期支持版本。对于Java开发人员来说这种节奏更为熟悉。这种升级有三年一次大型升级的缺点,但人们有更多时间来评价这种升级带来的风险。

也许还有一个折中的办法:在生产环境中使用LTS版本,同时在CI中确保应用程序能在每六个月一次的新版本上运行。这样既能将大型升级的风险降到最低,同时还能维护生产环境要求的稳定性。

授权变化

长期支持版本有个问题。Oracle的立场是,如果你需要长达三年的支持和更新,就应当考虑为其付费。所以,如果你想使用LTS版本并要求三年的支持,就要为Oracle的商业版JDK付费。

但是,Oracle也认识到并不是每个人都愿意付费,而且许多人更喜欢用开源的方式工作,所以他们现在有两个版本的JDK,其特性完全一样,但授权不同。商业版JDK可以在开发和测试中免费使用,但在生产环境中使用则需要付费;还有一个完全免费的OpenJDK版本。后者采用了开源的GPLv2+CPE授权,但其生命周期只有六个月。

从竞争的观点来看,这其实是好事。Oracle始终会将JDK中的功能移植到OpenJDK中,甚至还包括那些曾经用于商业版的功能,如Java Flight Recorder和Java Mission Control等。所以,由OpenJDK产生的一切JDK(也是绝大部分人都在使用的JDK)会包含你曾经用过的一切特性,甚至还会包括一些你没用过的特性。

还有许多其他供应商提供JDK。大部分是免费的,部分JDK的支持时间和期限与Oracke JDK不一样。这篇文档(
https://docs.google.com/document/d/1nFGazvrCvHMZJgFstlbzoHjpAVwv5DEdnaBr_5pKuHo/preview#heading=h.xn49s5cqkp4j)列出了不同的选项,并按照可以免费使用、必须拥有商业授权才能使用的方式分类。如果这些信息难以消化,那么最好的方法就是下载AdoptOpenJDK(https://adoptopenjdk.net/)构建的OpenJDK。这个JDK与Oracle JDK完全兼容,而且主要的操作系统和平台上都有,你可以选择不同的JVM(Hotspot或OpenJ9),他们还承诺为LTS版本提供至少四年的支持,而且还可以购买商业支持。

由于这个话题可能会非常复杂,我强烈建议阅读Java Champion的这篇文章《Java Is Still Free》(
https://docs.google.com/document/d/1nFGazvrCvHMZJgFstlbzoHjpAVwv5DEdnaBr_5pKuHo/preview),文中提供了更详细的信息。

总结

从Java 8发布之后许多情况都发生了改变:六个月一次的更新;授权、更新和支持的变化,以及JDK的获取途径等。在此之上还有语言变化,包括那些Java 9中引入的主要变化。

虽然这些变化让人头晕目眩,但其目的是为了给世界上最流行的语言提供高质量、频繁且在计划内的更新,同时让负责该语言的人能够持续做下去。

我们需要理解,这些改变可能会影响你的应用程序和组织,通过学习如何接受这些变化,最终会让你接受Java 8以及其后每六个月一次的新版本中引入的改进。

原文:
https://dzone.com/articles/beyond-java-8

本文为 CSDN 翻译,转载请注明来源出处。