在过去,Java主要版本通常倾向于加载对你可以和应该编写的代码产生巨大影响的深远特性,如泛型(Java 5)和函数构造(Java 8)。
随着Java 9的出现,Oracle引入了一个新的模块化系统(项目Jigsaw),该系统对JVM架构也产生了巨大的影响(尽管对语言语法的影响不大)。他们不得不两次推迟Java 9的发布,因为与Java社区中其他有影响力的成员在实现该功能方面存在分歧。
据推测,Oracle从中吸取了教训,如果你愿意的话,他决定彻底改革Java的开发风格,使其更加增量或“敏捷”。他们希望每六个月发布一次固定发布计划中具有较少新功能的主要版本,而不是让功能加载的主要版本有时可能需要很多年才能完成。
Java 9 和 Java 10 是这个新版本模型的前两个版本,Java 9 随着 Java 10 的发布而被弃用。Java 11 于 2018 年 9 月发布,是一个长期支持 (LTS) 版本,支持时间到 2026 年。这与许多人习惯的Ubuntu发布模型非常相似(顺便说一句,他们甚至计划用涉及发布年份和月份的东西替换版本号,类似于Canonical对Ubuntu所做的,但由于某种原因放弃了这个想法)。
现在,使用非 LTS 版本的 Java 意味着承诺每 6 个月更新一次使用 JDK 的软件。它不应该像过去那样将代码从一个主要的Java版本迁移到另一个主要的Java版本那样复杂,因为如上所述,语言更改应该以更渐进的方式发生,但这绝对是需要考虑的事情。如果你不想做出这个承诺,你应该坚持使用LTS版本,这意味着坚持使用Java 8或Java 11。
对于一个新的“绿地”项目,Java 11很可能是现在的最佳选择。但是,如果要使用的工具链尚不完全支持 Java 11,则可能有必要坚持使用 Java 8。
显然,在未来,Oracle希望每三年或每6个版本发布一个LTS版本,因此在Java 11之后的下一个LTS版本预计将是2021年9月的Java 17。