本文对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

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

  1. JVM(七) -- 内存与垃圾回收(二) -- 运行时数据区(四) -- Java堆

    运行时数据区最重要的内容,对应书中2.2.4节.3.8节. 位置: 1. 概述 一个java进程对应一个jvm虚拟机,也对应一个堆空间 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域 ...

  2. 最全的 JVM 面试知识点(一):运行时数据区

    转自: https://blog.csdn.net/keets1992/article/details/92089754 不是码农,不会敲代码的她,却最懂程序员!| 人物志: https://blog ...

  3. java只修改变的字段_java注解之运行时修改字段的注解值操作

    今天遇到需求:导入Excel时候列头会发生变化,客户是大爷要求你改代码, 导入Excel是用easypoi做的,识别表头是用注解@Excel(name = "xxx")通过这个na ...

  4. java slf4j日志级别_java - 在slf4j中设置运行时消息的日志级别 - 堆栈内存溢出

    ===============>>#1 票数:41 已采纳 使用slf4j无法做到这slf4j . 我想,缺少这个功能的原因是,几乎不可能为slf4j构建一个Level类型,它可以有效地映 ...

  5. Java按包编译jar_java用命令行编译运行时带有包和使用外部jar包的情况

    命令行编译运行Java程序时,加载指定目录中的Jar包: 解决方案一: 编译:javac -Djava.ext.dirs=./lib Test.java  或 javac -Djava.ext.dir ...

  6. JVM学习之:虚拟机中的运行时栈帧总结(一)

    <style type="text/css"> <!-- @page {margin:2cm} pre.cjk {font-family:"WenQua ...

  7. java将按钮添加到指定位置_在运行时将按钮添加到布局

    我正在开发一个Android项目,我需要在运行时向Layout添加按钮 . 所以,这是布局xml: xmlns:android="http://schemas.android.com/apk ...

  8. 【Java书笔记】:《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》第2部分-自动内存管理,第3部分-虚拟机执行子系统,第5部分-高效并发

    作者:周志明 整理者GitHub:https://github.com/starjuly/UnderstandingTheJVM 第2部分-自动内存管理 第2章 Java内存区域与内存溢出异常 2.2 ...

  9. java解析nes_【JVM系列】一步步解析java执行内幕

    对于任何一门语言,要想达到精通的水平,研究它的执行原理(或者叫底层机制)不失为一种良好的方式.在本篇文章中,将重点研究java源代码的执行原理,即从程 序员编写JAVA源代码,到最终形成产品,在整个过 ...

最新文章

  1. 创建WCF第一个应用程序
  2. Tuple VS ValueTuple
  3. 别只关注GPT3!细如发丝的模型更具现实杀伤力!
  4. BUAA_OO_第二单元
  5. Ubuntu 9.04 死机处理(Linux死机处理)
  6. 学习短视频制作能做什么工作啊
  7. Android界面开发工具DroidDraw
  8. 数据结构:实验三 二叉树操作实现
  9. 手机淘宝客应用(服务端+客户端+数据库)源码项目
  10. 2020最新xcode打包IPA(完整详细图文详解)
  11. 计算机模拟理论与应用,软物质的计算机模拟与理论方法
  12. 算法---找出数组中的所有孤独数字(Kotlin)
  13. MacW小编分享设计师们常用Sketch插件合集,让你效率翻倍!
  14. html5的class属性值,HTML class 属性 | 菜鸟教程
  15. 取消Steam软件设置在本机上保存账户凭据
  16. Spark、Docker、Tensorflow开发者看过来,CCTC 2017报名开启
  17. 【与GPT对话】杂记
  18. 1.16 常用电平标准(TTL、CMOS、LVTTL、LVCMOS、ECL、PECL、LVPECL)
  19. ABB智能定位器TZID-C说明书(中文版)
  20. 北京理工大学 计算机学院 书院,书院交流 | 北京理工大学睿信书院来我院调研交流...

热门文章

  1. .net mvc actionresult 返回字符串_.NET架构师知识普及
  2. c#链接操作mysql数据库代码_c#连接mysql数据库 代码
  3. android exchange服务,带有“ Service com.android.exchange.ExchangeService
  4. git stash pop_git常用命令行背诵并默写(全)
  5. CSS里面position:relative与position:absolute 区别
  6. 微型计算机原理及应用李干林,微机原理及接口技术李干林习题参考解答-20210415154329.docx-原创力文档...
  7. mysql大于等于怎么写_数据库中大于等于0小于等于100怎样表达
  8. 智能车竞赛技术报告 | 智能车视觉 - 青岛科技大学 - 飞猪
  9. 航天智慧物流南北分区赛通知
  10. 2021年春季学期-信号与系统-第六次作业参考答案-第一小题