当前位置: 首页 > news >正文

2019年Java和JVM生态系统预测:OpenJDK将成为Java运行时市场领导者

本文对2019年Java和JVM生态系统做了一些预测。

正如InfoQ 2018年度总结中说的那样,Java在2018年的发展势头非常有意思。

在我们步入2019之际,让我们来看看在新的一年中Java和相关技术值得注意的点,并试着猜测未来会发生些什么。

免责声明: 以下猜测仅仅是作者个人做出的,并不是来自Oracle、InfoQ或其他方面的官方声明或路线图。

Java 11将出现小规模但意义重大的采用

有关这个预测的争议是最小的。Java 9和Java 10在生产环境中的部署量很小,很多团队似乎都在等待后Java 8 LTS版本的发布,现在它来了,Java 11的采用将会以小而稳的速度开始。

导致Java 11被采用的一个推动因素是微服务和容器化的应用程序,使用Java 11实现二者都比使用Java 8来得容易。在部署全新的应用程序时,Java 11显然是团队更好的选择。

预测:到2019年底,Java 11安装率将占据Java产品安装总量的10%左右。

Java 8应用程序不会大规模迁移到Java 11

到现在为止,Java应用程序更新路径都是相对清晰的。从Java 6到Java 7,从Java 7到Java 8,几乎可以说是没有障碍的。但是从Java 8到Java 11并不是这样的,要将重要的应用程序迁移到新版本需要做大量的工作。

只有很少团队具备足够的资源用于迁移、重构和重新测试应用程序。因此,如果没有足够的外部理由,我不认为今年会有大规模Java 8应用程序被迁移到Java 11上。

预测:没有具体的可量化预测。

不会出现类似于Python 2/Python 3的分裂

很多人已经讨论过这个可能性,即随着Java模块化的出现,Java生态系统可能会出现类似于Python社区已经经历过的Python 2/Python 3分裂。

但我并不认为会发生这种情况,因为从根本上说,在语法和语义层面,Java 11并非一门完全不一样的语言。Python的不同版本之间在语法和关键数据类型(比如说Unicode字符串或长整型)方面发生了变化,所以库和应用程序作者必须有意识地选择使用哪个版本,这种选择蔓延到了整个生态系统中。

但对于Java来说,应用程序所有者需要决定是否要接受模块化,而库开发人员需要决定是否作为模块进行部署,如果是的话,需要为Java 8应用程序提供什么样的回退措施。对Java程序员来说,工作大致和之前相同,无论项目是基于Java 8还是Java 11,基本上还是使用相同的语言进行编程。

预测:没有具体的可量化预测。

渐进式的Graal采用

已经迁移到Java 11的项目可能也会关注Graal。Graal提供了下一代JIT编译器,新编译器可能会在2019年达到(甚至超过)Java 11的C2编译器(即-server)水平。

Graal-JIT迟早会超过C2,Graal的设计(特别是它是用Java实现的)意味着Graal团队可以很容易地实现任何C2可以实现的新优化。

“Graal”还包含了Oracle半开放的多语言运行时GraalVM。不过需要注意的是,Graal-JIT仅适用于Java 11及以上版本,而GraalVM仅涵盖了Java 8。

因此,Graal用户社区可能会分为两个部分,一部分关注Java 11应用程序的性能,一部分关Java 8生态系统的多语言应用程序。

预测:30%到40%的Java 11应用程序将在生产环境中使用Graal-JIT。
讨论是否将Graal作为Java 13的默认JIT编译器,但最后未能实现。
GraalVM在生产环境的部署还是很少,但会有越来越多的应用程序团队开始尝试使用它。

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

Oracle宣布终止对OpenJDK 8项目的所有权,Red Hat提出要接管该项目。OpenJDK 11项目可能也会一样,在Java 12发布的时候,Oracle将会放弃这个项目。

很多开发人员没有注意到Oracle的LTS产品仅针对付费用户,所以将来对Java 8(以及Java 12发布后的Java 11版本)的支持不会是由Oracle组织来提供,而是由Red Hat、Amazon、Azul Systems以及多厂商和社区驱动的AdoptOpenJDK项目来提供。

由于不再有免费的Oracle JDK发布到社区,我预测人们会快速将OpenJDK作为Java应用程序的生产平台。

好消息是,对于服务器端应用程序(以及越来越多的Java桌面程序),OpenJDK也是Oracle JDK的替代品。

预测:到2019年底,超过50%的Java 8和Java 11生产运行时会使用OpenJDK而不是Oracle JDK。

Java 12的发布

Java 12功能已经确定,将在2019年3月发布。除非有重大事件的发生,否则这次发布会按时进行。

这不是长期支持的版本,不太会被广泛采用(就像Java 9和Java 10没有被广泛采用一样)。

预测:Java 12按时发布,并在2019年底出现少量的生产部署。

Java 13发布

Java 13将在2019年9月发布。目前对于该版本将包含哪些功能并没有太多相关信息。

和Java 12一样,它是一个功能发布版本,并非LTS版本。因此,现在没有理由认为它无法按时发布。同样,它也不会被广泛使用,团队会更关注于迁移到Java 11。

预测:Java 13按时发布,并在2019年底出现少量生产部署。

值类型不会在Java 13中预览发布

值类型是除原始类型和对象引用之外的第三种JVM基础类型。这个概念可以被认为是放宽了Java类型系统规则,可以像C语言的结构体那样组合数据结构,同时保证完整的Java类型安全。

Java语言架构师Brian Goetz用“代码像类,功能像int”这样的话来描述他想象该特性发布以后一个典型的开发人员会如何使用值类型。

实现值类型的努力一直在继续,但到2018年底,只出现了试验性、非常早期、只有专家使用的测试原型。

这一点也不奇怪,值类型是Java平台最根本和最深入的变更之一。

这一功能的复杂度和期望度以及所涉及的大量工程工作使得它不太可能在2019年内交付。

预测: 即使在Java 13预览功能中也不可能出现任何形式的值类型。

match表达式首个版本将在Java 13中预览发布

switch表达式是match表达式的先决条件。如果语法中没有表达式形式,match表达式也不可能出现在Java中。事实上,如果没有match表达式,那么引入switch表达式也就变得没那么重要。

因此,我预测标准的switch表达式推出后,紧随其后会出现简单的match表达式。该功能刚开始可能仅限于类型匹配,不包含解构或其他高级功能。

预测:在Java 13的预览功能中会包含初始、有限的match表达式。

Kotlin适度增长

来自JetBrains的Kotlin语言在最近几年里获得了越来越多开发人员的关注。特别是在Android领域出现了爆发式增长,Android领域的新项目改由Kotlin主导。

然而,在服务器端Java方面并没有出现类似的爆发性增长。在2019年,我预计Kotlin的使用会稳定增长,但并不会有大量项目或团队突然转向使用Kotlin。会有一些高知名度的项目公开使用Kotlin。

预测:Kotlin将持续获得Java核心社区成员的追捧,但并不会发生爆发式增长,规模还是比Scala生态系统小。

一如往常

上面提到了Java比较突出的一些变化。然而,在Java世界腹地,未来一年中将大致保持不变。Java的IDE、库和生态系统的其余部分将大致保持相同。

Java在业内将继续保持稳固地位和发展趋势,并不会出现什么重大转折。

预测:没有具体的可量化预测。

查看英文原文:Java in 2019 - Some Predictions

相关文章:

  • 天海实业携手海宇勇创签署战略合作协议
  • 机器学习可行性与VC dimension
  • 处理linux下面的mysql乱码问题(下面的utf8换成gb2312也是可以的)
  • Java常见设计模式之适配器模式
  • 免费 官方的ASP.NET MVC电子书-Professional ASP.NET MVC 1.0
  • ashx文件的使用[转]
  • Python备份目录及目录下的全部内容
  • MS CRM 2011 RetrieveMultiple with JScript JQuery Silverlight LINQ FetchXML and QueryExpression
  • 初识SOA
  • 需求:需求获取技术之原型
  • Windows Azure HandBook (4) 分析Windows Azure如何处理Session
  • 树莓派练习程序(声音检测)
  • .NET 4.0中的泛型协变和反变
  • flex 属性绑定
  • 常用方法
  • php的引用
  • 【面试系列】之二:关于js原型
  • js中forEach回调同异步问题
  • mysql 5.6 原生Online DDL解析
  • mysql外键的使用
  • 工作手记之html2canvas使用概述
  • 机器学习 vs. 深度学习
  • 面试总结JavaScript篇
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 事件委托的小应用
  • 用 Swift 编写面向协议的视图
  • 转载:[译] 内容加速黑科技趣谈
  • 最近的计划
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #微信小程序:微信小程序常见的配置传旨
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (SpringBoot)第七章:SpringBoot日志文件
  • (二)构建dubbo分布式平台-平台功能导图
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转) Face-Resources
  • (转)创业的注意事项
  • ***测试-HTTP方法
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET Standard 的管理策略
  • .net 按比例显示图片的缩略图
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • [ C++ ] STL---仿函数与priority_queue
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [Assignment] C++1
  • [C# 网络编程系列]专题六:UDP编程
  • [C++]高精度 bign (重载运算符版本)
  • [DL]深度学习_Feature Pyramid Network
  • [EWS]查找 文件夹
  • [Flutter]打包IPA
  • [IE技巧] IE8中HTTP连接数目的变化
  • [iOS开发]iOS中TabBar中间按钮凸起的实现
  • [iphone-cocos2d]关于Loading的若干处理和讨论