Skip to content

为什么 Java/JDK 都出 20 了,仍推荐使用 1.8 呢?

Java SE 8(又名“Java 8”)于 2014 年 3 月发布,当前 Java 都出到了 20, 为什么仍推荐使用这么旧的 Java 版本?

事实上,自从 Oracle 决定改变 Java 发布的频率,以及对它长期支持的态度以来,许多组织已经决定坚持使用 Java 8,尽管有许多新版本。2020 年 2 月的一项调查发现,8% 的开发人员报告说 Java 8 仍然是最常用的 Java 版本。

下面我们说明下选择继续使用旧版本的 Java 而不是采用最新版本的一些原因。

长期支持 (LTS) 版本

Java 8 仍然如此流行的关键原因之一是它是 LTS(长期支持)版本。并非所有版本的Java都是 LTS 版本!自引入此策略以来,只有 Java 8(2014)和 Java 11(2018)被指定为具有LTS。

从商业角度来看,任何组织都不应该考虑将依赖于没有 LTS 的 Java 版本的系统投入生产。

授权

早在 2018 年,甲骨文就宣布对Java的许可方式进行根本性改变。从2019年开始,如果一个组织将 Java 11+ 商业使用,那么他们必须为此付费。

Oracle JDK v OpenJDK

官方 Oracle JDK(Java开发工具包)的替代方案是 OpenJDK。OpenJDK 是 Oracle 的 JDK 开源版本。

OpenJDK

尽管长期以来一直有 Java 的开源版本;从 Java 11 开始,Oracle 正式提供了免费使用的开源 OpenJDK 。此版本的 JDK 在开源 GNU 通用公共许可证 (GPL) v2 下发布。

Oracle JDK

这是 Oracle 商业支持的 Java 版本。它是从 OpenJDK 源代码构建的。过去,Java 的开源版本和 Oracle 的商业版本之间存在差异,部分原因是后者使用了闭源或专有元素。但是,从 Java 11 开始,除了一些外观差异外,这两个版本“基本相同”。

由于 Oracle JDK 和 OpenJDK 之间的历史差异,以及支持策略的差异( OpenJDK 仅支持对最新版本的更改); 一些组织一直不愿意采用 OpenJDK ,或者对这两个版本感到困惑(尤其是由于名称非常相似)。

更新频率

商业组织通常更喜欢稳定性而不是变化,在 Java 9 之前,Java 改变的频率很低。事实上,Java 3 和 Java 7 的发布之间有8年的时间。但是,自 Java 9 以来,每六个月(通常是3月和9月)更新新版本的频率有所增加。这些版本中的每一个都引入了新功能,弃用(或删除)其他功能,并且经常对程序的执行方式进行更改。这可能意味着组织对采用较新的版本感到紧张,因为他们可能每六个月都会面临一次额外的技术挑战。

以上这些可以解释为什么组织应该只对生产系统使用 Java LTS 版本。因此,重点自然是 Java 8 和 11。这也许又提出了一个问题:“他们应该切换到 Java 11吗?

可能更新到 Java 11 的四个原因

Java 8 不再免费

对Java 8商业用途的免费支持于2019年1月结束。

模块

模块是在Java 9中引入的。它们提供了一种封装代码体及其依赖项的有效方法。这避免了与单个类路径和库版本地狱相关的问题!

虚拟机版本

Java 8 和 Java 11 之间的 Java 运行时环境(或 JVM)发生了重大变化。这些更改可以显著提高应用程序的性能(请参阅 GraalVM 和 Z 垃圾回收器)。

局部变量类型推断

在许多现代编程语言中,包括 Kotlin 和 Scala,编译器能够使用类型推断来推断变量的类型。这简化了变量的规范并减少了样板代码的数量。此功能是通过 var 关键字在 Java 10 中引入的,并允许以下代码行:

HashMap<String, String> data = new HashMap<String, String>();

简单地重写为:

var data = new HashMap<String, String>();

总之,许多组织仍在使用 Java 8 有以上原因。展望未来,他们可能会选择使用 Java 11,因为这是当前的LTS版本,或者可能决定等到Java 17(下一个LTS版本)发布。