赢得一个定制的New Relic弹球机!只要让其他数据呆子注册FutureStack就可以了。 现在注册

2018年除夕,我做了一些预测我的想法Java和相关技术可能会在2019年出现。现在我们已经走过了半年多的时间,似乎是重温这些预测的好时机,看看我做得如何——以及Java做得如何。

不要错过:Modern Software podcast—ben Evans介绍Java的开源未来、优化Java性能、发现Java反模式等

让我们逐一分析这11种预测,并对每一种给出一些评论:

1.Java 11开始得到小规模但意义重大的采用

java的标志我的第一个预测是,Java 11将在2019年开始被小规模但重要的采用。我觉得我在这里的基础相当稳固,因为Java 11是Oracle的第一个专业长期支援版。我们这些在这个行业已经有一段时间的人期望企业和大公司考虑转向Java 11——即使他们可能没有考虑过转向Java 9或Java 10。

具体来说,我预测到2019年底,Java 11将占整个Java生产安装的10%,因为我们刚刚过了今年的一半,我们应该会看到5%的安装是在Java 11上。请注意,我们在New Relic看到的Java产品部署中,大约有5%运行在Java 11上。(New Relic是一个生产工具,所以这些数据反映的是人们生产系统的实际情况,而不是基于开发人员在IDE中用于实验目的所使用的指标)

2.没有将现有应用程序从Java 8大规模移植到Java 11

我的下一个预测是,我们不会看到很多人做大量的返工来将现有的Java 8应用程序升级到Java 11。相反,我预测大部分的增长将来自于新的服务和人们试图在Java 11上从头开始构建新的新应用程序。然而,我并没有在这里做一个可量化的预测,这并不是我们能够在汇总的New Relic用户数据中真正看到的东西。

有趣的是,我想也许我对这个预测太悲观了。当我们在New Relic内部推出Java 11时,有相当多的团队热衷于采用新版本!

3.没有类似的python2 / python3除法

我认为我的预测是非常可靠的;尽管我们看到Java 8的特定库版本也出现在Java 11的版本中,但我们并没有看到社区中出现像Python 2和Python 3那样的分歧。我的理由是,Java 8和Java 11并不是真正独立的语言。虽然Python 2和Python 3在语法层面不兼容,但除了模块化之外,Java 8和Java 11实际上是相同的语言——而且每个有效的Java 8程序仍然用Java 11中使用的相同语义编译和运行。

4.继续逐步采用Graal

Graal是Java 11中新的即时(JIT)编译器,而gral实际上是用Java编写的!(尽量不要想得太多。)格拉尔的曝光率很高,以及像Twitter已经从使用Graal中获得了很多好处。我的具体预测有三部分:

  • 我预测30%到40%的Java 11应用程序将在其生产部署中使用Graal JIT。我不认为我们有足够的数据来说明我是否达到了这个目标。
  • 我预测,Graal将成为Java 13中默认JIT的有力竞争者(计划于2019年9月实施)。我得说,这件事让我洗了个澡。这种讨论根本没有发生。
  • 我预测GraalVM的生产部署将仍然很少,但应用程序团队将进行试验。GraalVM是一个迷人的计算机科学项目,但它也希望提供一些相当令人印象深刻的性能数字。New Relic的Java团队告诉我,他们还没有收到任何关于GraalVM的询问,所以我认为我的预测是非常可靠的。事实上,我可能有点太乐观了。也许应用程序团队甚至都没有尝试过。(如果这是真的,那就太可惜了,因为这是一项超级酷的技术。)

5.OpenJDK成为Java运行时的市场领导者

我真的冒了很大的风险。我的可测试预测是,到2019年底,超过50%的Java 8和Java 11生产运行时将使用OpenJDK而不是Oracle JDK。

我不得不说,在Java 11方面,我完全搞错了的方式超过50%。我们看到的Java 11的需求几乎都是OpenJDK。似乎大多数企业(那些想要采用11个月的企业)都花了6个多月才解决了这个问题,到那时Oracle JDK已经没有免费的支持了。这意味着除非他们准备为支持付费,否则这些企业别无选择,只能采用OpenJDK。

对于Java 8,现在下结论还为时过早。OpenJDK还没有达到25%,但是OpenJDK第一个独立于Oracle的版本直到2019年4月才发布。然而,我仍然认为,我们将在夏季和秋季看到一个大的上升。所以即使我现在有点落后,这个预测还是有时间的。

6.Java 12发布

我预测Java 12会按时发布,但到2019年底只会得到舍入错误的生产部署。虽然Java 12确实按时发布了(2019年3月19日),但我们还没有看到任何Java 12的实际生产部署。所以我觉得我在这个问题上是很有把握的。

7.Java 13发布

类似地,我预测Java 13也会按时发布,但到2019年底只能得到舍入错误的生产部署。我准备在这个问题上加倍下注——我不认为我们会在那里看到很多部署。

8.值类型在Java 13中没有作为预览版发布

好了,我们已经经过了Java 13功能完成的日期,而且我们没有得到任何值类型的版本(现在已经改名为“内联类”)。我也准备对这个预测加倍下注,并且说我们不会在Java 14(2020年3月)中获得任何版本的值类型,即使是预览形式。这些原型还不够完整,无法将其交付给主流Java开发人员。

9.匹配表达式的初始版本在Java 13中预览

基本上,匹配表达式是一种称为模式匹配的现代语言特性,像Kotlin、Scala和Swift这样的语言已经有很长一段时间了。匹配表达式在Haskell等函数式语言中也很常见。但是,当一些最初的构建块或多或少已经为Java做好准备时,Oracle决定重新预览其中的一个构建块,这显然推迟了时间表。

如果我今天做这个预测,我想说更有可能的是,匹配表达式将作为Java 14的一个预览特性,连同switch表达式的最终版本一起发布。我想明年三月我们就知道了!

10.Kotlin增长缓慢

你可能会想来自JetBrains的Kotlin语言作为一种Java++:继承Scala曾经承诺的Java改进版本的衣钵。Kotlin提供了一些额外的特性、更简洁的代码、更好的重构、数据类和匹配表达式的版本(见上文)。它为Java开发人员提供了一条有趣的升级路径,而且它已经成为Android开发的主导语言。

当我做出这个预测时,我想知道Java开发人员在他们现有的项目中是否会有采用Kotlin的趋势。到目前为止,这种情况还没有发生。现在有越来越多的人开始使用Kotlin,谷歌在Android领域也非常支持Kotlin。

因此,Kotlin有工具支持,它有高层可见的赞助,它在核心Java社区中有一些粉丝。但是,还没有任何热门库或其他基础架构组件被编写为Kotlin-first。显然,没有人会放弃爪哇去接Kotlin。我承认我对Kotlin有些好感,但我认为总体上我的预测是正确的。

11.照常营业

虽然我的大部分预测都集中在Java的前沿领域,但我的最后一项建议是,Java世界的其他领域将经历更多类似的一年……Java的ide、库和生态系统的其他部分基本上将继续沿着相同的轨道发展。

总的来说,我认为我对自己的预测非常满意。我没有犯任何大的错误——唯一真正错过了有关Java 11采用标志的预测。我应该意识到很多人会直接采用OpenJDK,不会有很多人立即采用Oracle Java 11。

2019年还有很长的一段路要走——正如我们所知,在短短几个月的时间里,软件世界可能会发生很多变化。我计划在年底重新审视这些预测,并对2020年提出一些新的预测。我迫不及待地想看看在不断变化的java世界中事情是如何发展的——特别是那些我无法预测的事情!

想了解更多关于Java的知识吗?我最近的书是优化JavaJava in a Nutshell(第七版),均由奥莱利出版。你可以看到附带的视频优化Java在这里