Java 10 9之后就可以了; 担心8(或更早)之后的Java 10

“社区只需要每3-4年更新一次Java版本”

Java 10是在几周前发布的,但是我们仍在剖析其最重要的功能(*咳嗽*本地变量类型推断*咳嗽*),这些功能并没有削减和迁移过程。 在讨论的过程中,我们需要讨论新版本的节奏以及对旧版指南的需求(或相反)。

新的释放节奏会导致释放疲劳吗? Wayne Citrin博士在这篇文章中着重探讨了这个不可避免的问题。

看,我明白了:Java 8发布三年之后,人们才开始感到沮丧,Oracle 9受到了应有的热度。 但是我认为钟摆朝另一个方向摆动得太远了。 每六个月发布一次,我们将获得新发布的版本,其中包含一些次要的新功能,这些新功能鲜为人知,很少有人在意。 如果旧的两年周期太慢,为什么不通过分开差异并采用一年周期来缓解释放疲劳呢?

现在,友好的提醒:Java SE 9和10是短期发行版 因此,鼓励用户在可用时过渡到下一个版本。 简而言之,这意味着,如果您不在他们不在时给他们机会,那么以后再也不会和他们一起玩了。

Java 10 9之后就可以了; 担心8(或更早)之后的Java 10

资料来源:Oracle Java SE支持路线图

回到我们的采访系列!

认识我们的Java专家

Java 10 9之后就可以了; 担心8(或更早)之后的Java 10

Donald Smith是Oracle产品管理的高级总监。

Java 10 9之后就可以了; 担心8(或更早)之后的Java 10

Greg Luck是Hazelcast的首席执行官/首席技术官。

Java 10 9之后就可以了; 担心8(或更早)之后的Java 10

Simon Ritter是Azul Systems的副CTO。

Java 10 9之后就可以了; 担心8(或更早)之后的Java 10

Lukas Eder是Data Geekery GmbH的创始人兼研发主管,该公司是jOOQ和Java Champion背后的公司。

Java 10 9之后就可以了; 担心8(或更早)之后的Java 10

Trisha Gee是JetBrains的一名开发倡导者,是伦敦Java社区的重要成员和Java冠军。

Java 10 9之后就可以了; 担心8(或更早)之后的Java 10

Markus Eisele是Lightbend的开发人员倡导主管和Java冠军。

Java 10 9之后就可以了; 担心8(或更早)之后的Java 10

Marcus Biel是一名软件工匠,JCP成员和CleanCode传播者。

Java 10 9之后就可以了; 担心8(或更早)之后的Java 10

Wayne Citrin博士是JNBridge,LLC的CTO和联合创始人。

Java 10 9之后就可以了; 担心8(或更早)之后的Java 10

David Heffelfinger是Java冠军和Jakarta EE顾问兼讲师。

Java 10 9之后就可以了; 担心8(或更早)之后的Java 10

Nicolai Parlog是一名开发人员(主要是#Java),CodeFX的博客作者,作家,YouTuber和培训师。

Java 10 9之后就可以了; 担心8(或更早)之后的Java 10

Richard Gall是Packt的传播经理。

唐纳德·史密斯(Donald Smith): 虽然生态系统需要花一些时间来适应新版本的节奏和含义,但我们相信新版本的发行周期最终将使开发人员更轻松地从一个版本过渡到另一个版本。

从Java 9迁移到Java 10并不像从7迁移到8。交付的创新数量保持不变,但是交付的速度不断提高,而不会破坏开发人员的体验。

现代应用程序开发希望获得简单的开放许可,并且可以预测基于时间的节奏,并且新模型可以在两者上实现。

从Java 9迁移到Java 10就像从7迁移到8。

格雷格·勒克: 是的,太多了。 社区只希望每3-4年更新一次Java版本。

除非您是Oracle新客户,否则Oracle将加快Java版本的发布,同时缩短对这些新版本的支持期限。 Java 9和Java 10仅支持6个月! 因此,截至2018年3月,Java 9现在不受支持!

如果您是客户,那么使用“长期支持”(LTS)版本可以做得更好。 其中第一个将是Java 11,该软件将于今年9月发布。 Oracle尚未宣布公开更新将持续多长时间。 但是,如果您是支持客户,则可以在2013年之前获得高级支持,在2026年之前获得扩展支持。

鼓励寻求对功能发布有更长支持和维护期限的客户迁移到Oracle Java SE产品( Oracle Java SE Advanced,Oracle Java SE Advanced Desktop和Oracle Java SE Suite )。 对于Java SE 8之后的版本,将保留未指定为LTS发行版的Oracle Java SE产品发行版,直到后续发行版为止。 请参见 Oracle Java SE路线图

为什么要使用无法获得新更新的Java版本? 从生产的角度来看,应将Java 9和Java 10视为Beta版本。 关于Java 11的争论不休。如果Oracle积极地从Java货币化,那么Java 11将拥有较短的公共(免费)维护时段,那么它也将被视为非生产性的。

我认为几乎所有Java用户群都将继续使用Java 8,并在Oracle的获利策略出台后,等待Oracle在所有这些方面的最终地位。 我们可能会在这方面再等几年。

同时,我们已经看到正在发生的事情是 Azul Systems的 业务蓬勃发展 ,后者提供了Oracle的Java支持替代方案。 我们可以预期,非Oracle Java支持业务可能会随着新进入者而增长。

另外,我认为这些变化部分地在推动其他编程语言的发展。 在Hazelcast,我们将其与C ++ 、. NET,Scala,Node.js,Python的客户端一起使用,而刚发布的 Go 客户端也可以使用

西蒙·里特: 我认为我们必须拭目以待! 发布节奏很快,这很棒,因为它使开发人员能够更快地获得新功能。 这是许多开发人员一直在要求的东西。

但是,对于部署并可以访问错误修复和安全补丁而言,这将是一个更大的挑战。 我们在Azul努力通过我们的Zulu版本的OpenJDK使人们更容易做到这一点。

卢卡斯·埃德(Lukas Eder): 不,我认为没有问题。 当然,库供应商会付出额外的努力,但是再说一次,一旦不再支持Java 9(在2018年3月!),再也不会有人在乎Java 9了……

Trisha Gee: 听起来确实很雄心勃勃! 但是,如今,许多应用程序,工具和产品每天都会发布多个版本,因此与Java相比,Java每年两次发布仍然“缓慢”。 当然,例如,语言更新与Facebook工作方式的微小变化有些不同。

但是能够a)对语言进行定期的,可预测的更新(例如,mmm,而不是等待Java 9的有趣等待),使得使用Java的组织中的计划变得更加容易,并且b)作为开发人员,我现在可以看一下一年两次改进Java中的性能(无论是性能,语法还是其他方面),这非常令人兴奋。 这些发行版在过去也要小得多,这也有帮助,因为作为开发人员,我只需要进行少量更改即可,而不必进行大量发行。

Markus Eisele: 我戴着两顶帽子回答这个问题。 首先,我确实相信每个Java开发人员都在急切地等待运行时的更快进度。 拥有更好的功能来更好地反映当今的需求是保持生产力并为客户创造价值的必要条件。

另一方面,对于企业来说,采用这种快节奏的发布节奏将是一个巨大的挑战。 官方支持窗口也必须缩小。 听到更具体的客户故事以了解他们的过程和对新发行节奏有更深入了解的经验会很有趣。

但是,即使对于企业来说,这也可能只是一个新的加速过程。 图书馆开发人员和开源项目面临最大的挑战。 Java版本的支持范围要求它们保留各种版本,并支持其使用者使用的JDK版本的合理子集。 此处的关键字是Multi-Release JAR。 如果这对每个人都能解决,那么另一个问题将随着时间的流逝而得到解答。

马库斯·比尔: 好吧,作为一名真正的德国人,我可能应该说,现在一切都太恐怖了,过去比以前好多了! 好的,现在比较严肃:尽管还不熟悉这么快地发布另一个Java版本,但我确实欢迎新的,更快的发布节奏。 这绝对是朝正确方向迈出的一步!

还请参见: Java 10终于来了! 仔细了解新功能

韦恩·西特林(Wayne Citrin): 在记录 中说,现在发布新功能还为时过早,而且一年两次的节奏太多了。 Java社区对新版本的兴奋被浪费了,这确实存在“释放疲劳”的危险。

David Heffelfinger: 我认为现在下 结论 还为时过早。 我们已经习惯于每隔几年获得一个新的Java版本,新的发行节奏肯定需要进行一些调整。 关于新版本的节奏将如何影响Java IDE和培训材料(书籍等),仍然存在一些悬而未决的问题,一些人担心IDE可能无法跟上变化的速度,而且培训材料可能过时了。

Nicolai Parlog: 这是一个公平的问题。 虽然我看到发行节奏可能会破坏生态系统到大量不兼容的版本范围,但我认为这不是最可能的结果。 我想我们必须拭目以待。

理查德·加尔(Richard Gall): 这只是一种不同的方法。 功能发布不管如何。 如果有小的新功能:它已发布。 主要的新功能可能仍然落后。 开发有节奏,这就是您从开发的当前状态创建发布的频率。 是生意。 创建发布有成本。 另一方面,功能发布越早,生产中就越早使用它来创造价值。

唐纳德·史密斯(Donald Smith): 新节奏旨在加快创新步伐,同时最大程度地减少对开发人员体验的破坏。 我们相信Java 10中引入的新功能将有助于最大程度地提高效率,而不是使传统开发人员更难以利用Java。

格雷格·勒克(Greg Luck): 几乎没有人会使用Java 10时,我认为我们不应该将Java 10视为传统。 相反,我认为我们可以参考Java 10边秀。

所做的更改很小,可以逐渐集成到现有代码库中。 它不像Java 9和模块系统那样具有破坏性。 如果您的应用程序可以在Java 9上运行,那么很可能也可以在Java 10上运行。

Simon Ritter: 我认为JDK 10中没有足够的资源来要求旧版指南。 但是,如果开发人员正在考虑从JDK 8(或更早版本)迁移到JDK 10,那么他们将需要考虑如何迁移到JDK 9中引入的Java平台模块系统(JPMS)。 JDK 10仍然需要开发人员解决JPMS问题。

随着发布节奏的加快,更有意义的是减少了每六个月的“ Java 10/12/12指南”,而更多的是活泼的“ How to use modern Java”类型指南。

卢卡斯·埃德(Lukas Eder): 从我所知道的来看,这并不重要。 与lambda,方法引用,接口方法等相比,甚至JEP 286似乎都是很小的更改。

Trisha Gee: 这是一个很好的问题。 我认为,以更快的发布节奏,更有意义的是每六个月减少一次“ Java 10/12/12指南”,而更多的是实时更新的“ How to use modern Java”类型指南,其中包括相关功能的更新(并标有其发行版本)。

Markus Eisele: 我建议不要高估此特定版本。 开发人员唯一的新功能是局部变量类型推断(JEP 286)。 生态系统可以开始学习的一件事是处理开发生命周期中各种JDK版本的共存。 我们的行业期望我们以各种方式跟上新版本的发布,而保持最新状态是我个人最重要的要求。

马库斯·比尔(Marcus Biel): 由于发行量很小,我希望不会有什么大问题。

Wayne Citrin: 除非您是通过Java 10的某些新功能直接满足非常专业的需求的开发人员,否则此发行版实在太小了,对于传统开发人员而言,不必担心。 由于我 的Java 9的旧版开发人员指南 很流行,因此 我试图整理 Java 10的 旧版开发人员指南 ,但是我真的没话要说。

还请参见: 开发人员仍在使用Java8。这对于Java 10的采用意味着什么?

David Heffelfinger: Java 10的大多数更改都是“幕后”(改进的垃圾收集等),唯一面向用户的功能是局部变量类型推断,这是一个相对较小的功能。 Java 10的旧指南听起来有些矫kill过正,也许博客文章或在线文章就足以让有能力的Java开发人员尽快掌握Java 10的新功能。

Nicolai Parlog: 如果他们设法在Java 9上运行所有功能,那么轻而易举地升​​级到Java 10,因此无需进行迁移或使用旧版指南。

但这并不意味着发布并不重要。 每个新版本都是漫长的一步。 有些步骤较大,例如上述值类型,但所有步骤都很重要。

理查德·加尔(Richard Gall): 绝对是一个小版本。 您可以创建旧版指南。 在这里是:“嗨! 当您不想显式定义局部变量的类型时,可以使用'var'。” 就是这样。

在我们的访谈系列的最后一部分中,我们的受访者会考虑模块化的生态系统,并介绍他们的Java 11愿望清单。

Java 10的12个JEPS

只是为了刷新您的记忆,Java 10包括通过JDK增强建议(JEPS)定义的12个新增强

  1. (JEP 286)局部变量类型推断:增强了Java语言,以将类型推断扩展到具有初始化程序的局部变量的声明。 它将var引入Java,这在其他语言中很常见。
  2. (JEP 296)将JDK目录林合并为一个存储库:将JDK目录林的多个存储库合并为一个存储库,以便简化和简化开发。
  3. (JEP 204)车库收集器接口:通过引入干净的垃圾收集器(GC)接口,改进了不同垃圾收集器的源代码隔离。
  4. (JEP 307)用于G1的并行完整GC:通过使完整GC并行来提高G1最坏情况的延迟。
  5. (JEP 301)应用程序数据类共享:为了改善启动和占用空间,此JEP扩展了现有的类数据共享(“ CDS”)功能,以允许将应用程序类放置在共享档案中。
  6. (JEP 312)线程本地握手:介绍一种在不执行全局VM安全点的情况下在线程上执行回调的方法。 使停止单个线程而不是仅停止所有线程或不停止一个线程既可行又便宜。
  7. (JEP 313)删除本机头生成器工具:从JDK中删除javah工具,因为它已被javac中的高级功能所取代。
  8. (JEP 314)其他Unicode语言标签扩展:增强了java.util.Locale和相关API,以实现BCP 47语言标签的其他Unicode扩展。
  9. (JEP 316)备用内存设备上的堆分配:使HotSpot VM可以在用户指定的备用内存设备(例如NV-DIMM)上分配Java对象堆。
  10. (JEP 317)基于实验Java的JIT编译器:使基于Java的JIT编译器Graal可用作Linux / x64平台上的实验JIT编译器。
  11. (JEP 319)根证书:在JDK中提供一组默认的根证书颁发机构(CA)证书。
  12. (JEP 322)基于时间的发行版本控制:针对当前和将来的基于时间的发行模型,修改Java SE平台和JDK的版本字符串方案以及相关的版本控制信息。

翻译自: https://jaxenter.com/java-10-interview-series-part-4-143144.html