技术更新的速度让人惧怕,决定Java将来的三大主要项目是什么?

决定Java将来的三大主要项目!
Java 12 发布了,没有引发很大的讨论。对于 Java 这样一门成熟的语言来讲,每一次更新彷佛都没法知足庞大的 Java 开发群体与生态圈。再加上 Oracle 对 Java 回味无穷的态度,Java 的将来会如何?

Java 的变化速度从未如此之快——现在,该语言的新版本每六个月就会发布一次。前端

而之因此可以实现如此重大的转变,天然离不开一系列专一于提升其性能与添加新功能的协做性项目的贡献。这些项目的目标可谓雄心勃勃。正如 JetBrains 开发者布道师 Trisha Gee 在 QCon 伦敦 2019 大会上所言,“Java 即将迎来不少超酷的东西。”java

而发展道路中的如下三大主要项目,将有助于肯定 Java 的将来方向。程序员


1、Loom 项目

尝试改进 Java 语言的并发处理方式,或者说是在对计算机在不一样指令集执行之间切换能力的探索。express

甲骨文公司 Loom 项目技术负责人 Ron Pressler 在 QCon 伦敦 2019 大会上向但愿编写软件以处理并发任务的 Java 开发者们提出了两种都不够完美的选项:要么编写没法经过扩展处理大量并发任务的“简单同步阻塞代码”,要么编写可扩展但编写难度极高且调试过程复杂的异步代码。编程

为了寻求解决这个问题的方法,Loom 项目引入了一种将任务拆分为线程的新方法——所谓线程,便是指计算机在运行指令时的最小可能执行单元。在这方面,Loom 引入了被称为 fibers 的新型轻量级用户线程。后端

他在大会上指出,“利用 fibers,若是咱们确保其轻量化程度高于内核提供的线程,那么问题就获得了解决。你们将可以尽量多地使用这些用户模式下的轻量级线程,且基本不会出现任何阻塞问题。”浏览器

利用这些新的 fibers,用户将可以扩展 Java 虚拟机(JVM)以支持定界延续(delimited continuations)机制,从而使得指令集的执行实现暂停以及恢复。对这些延续进行暂停与恢复的任务将由 Java 中的 ForkJoinPool 调度程序以异步模式处理。安全

根听说明文档所言,fibers 将使用与 Java 现有 Thread 类很是类似的 API,这意味着 Java 开发人员的学习曲线应该不会太过陡峭。性能优化


2、Amber 项目

Amber 项目的目标,在于支持“更小、面向生产力的 Java 语言功能”的开发,从而加快将新功能添加至 Java 语言中的速度。bash

这套方案很是适合自 Java 9 以来,以更快速度持续发布的各 Java 新版本。

目前,如下 JDK 加强提案(简称 JEP)正在进行当中,并隶属于 Amber 项目以内。

生字符串:

https://openjdk.java.net/jeps/326复制代码

生字符串使得开发人员可以更轻松地对文本进行适当格式化,且无需引入由转义字符带来的复杂性。

举例来讲,开发人员没必要使用

转义字符来表示换行符,所以在如下字符串中:

Hello
World复制代码

能够直接编写为:

`Hello
World`复制代码

而非本来的:

"Hello World"复制代码

该提案的说明文档中提到,这一变动将使得各种文本客串的输入变得更加简单,包括文件路径以及 SQL 语句等等。

如你们所见,生字符串应被包含在反引号以内。

用于 JDK API 的 Java 编译器 Intrinsic:

https://openjdk.java.net/jeps/348复制代码

此项提案将容许开发人员对须要按期调用的重要代码段进行性能优化。

具体来讲,它容许开发人员将特定于 JDK 的方法指定为编译时内部化候选项,从而指示编译器对其性能进行优化。

考虑到在 Java 当中的重要意义,此提案的说明文档将 String::format 与 Objects::hash 做为编译时内部化方法示例。这些方法可使用 @IntrinsicCandidate 进行注释,以指示编译器将其视为编译时内部化候选项。如此一来,JDK 的 javac 编译器便可经过修改建立出内部化进程的处理机制。

Pattern Matching:

https://openjdk.java.net/jeps/305复制代码

Pattern Matching 可以简化利用 Java 中 instanceof 运算符检查对象是否属于特定类的过程,然后提取该对象的组件以进行进一步处理。

如此一来,如下操做语法:

if (obj instanceof Integer) {
int intValue = ((Integer) obj).intValue();
// use intValue
}复制代码

将可被简化为:

if (x instanceof Integer i) {
// can use i here, of type Integer
}复制代码

Switch Expressions:

https://openjdk.java.net/jeps/325复制代码

Switch expressions 已经在 Java 12 当中以预览版形式推出,容许开发人员利用更简单的语法经过 switch 语句为输入内容指定不一样的响应方式。

举例来讲,如今咱们再也不须要始终在如下语法当中使用 switch 语句:

switch (port) {
case 20:
type = PortType.FTP;
break;
}复制代码

而能够采起如下更为简洁的表达方式:

Switch (port) {
case 20 -> PortType.FTP;
}复制代码


3、Valhalla 项目

Valhalla 项目专一于支持“高级”JVM 与语言功能的开发。

目前 Valhalla 项目的候选提案还比较有限,具体包括:

Value Types:

https://openjdk.java.net/jeps/169复制代码

此项提案旨在容许 JVM 处理一种新的类型,即 Value Types。

这些新的不可变类型将拥有与 int 等基元相似的内存效率,但同时又与普通类同样可以保存一整套基元集合。提案说明文档中指出,其目标在于“为 JVM 基础设施提供处理不可变与无引用对象的能力,从而实现使用非基元类型进行高效按值计算的目标。”

Generic Specialization:

https://openjdk.java.net/jeps/218复制代码

此项提案扩展了适用于泛型的具体类型,其中包括基元以及即将推出的 Value Types。

英文原文

Future of the Java programming language: Three major projects on the horizon


来自 Oracle 的警告

Java 8 是目前使用率最高的一个 Java 版本,发布于 2014 年,而 Oracle 对 Java 8 的官方支持时间持续到 2020 年 12 月,以后将再也不为我的桌面用户提供 Oracle JDK 8 的修复更新;在 2019 年 1 月以后,再也不提供免费的商业版本更新,届时想要继续得到 Oracle 的商业支持和维护,需付费订阅。

近日,Oracle 的销售表明发出的一封邮件引发了热议,该邮件称“Java 8 的非公开可用的关键补丁更新”将于 2019 年 4 月 16 日发布,拥有有效许可证的客户才能够享用。邮件继续称,若是没有安装这些更新,可能致使“你的服务器和桌面环境暴露且易受攻击。”

但在许多 Java 用户看来,这封邮件像是一种敲诈勒索或恐吓策略。


Oracle 撒手,OpenJDK 继续向前

虽然 Oracle 官方选择了再也不支持,但 Java 社区却把担子接了下来。红帽 Java 平台团队的首席工程师 Andrew Haley 曾表示,红帽计划在 2023 年以前继续提供对 OpenJDK 8 的支持:

在我看来,这算比较正常的。几年前,OpenJDK 6 更新(jdk6u)项目被 Oracle 放弃,我接管了它,而后 OpenJDK 7 也发生了一样的事情。最后,Azul 的 Andrew Brygin 接管了 OpenJDK 6。由来自多个组织成员组成的 OpenJDK Vulnerability Group 就重要的安全问题进行协做。在广大的 OpenJDK 社区和个人团队(Red Hat)的帮助下,咱们按期为关键 bug 和安全漏洞提供更新。我以为这样的过程一样适用于 OpenJDK 8 和下一个长期支持版本,即 OpenJDK 11。

若是能够获得社区的支持,我很高兴可以领导 JDK 8 更新项目和 JDK 11 更新项目。

除了红帽之外,AWS 推出了 OpenJDK 长期支持版本 Amazon Corretto。阿里巴巴也开源了 OpenJDK 长期支持版本 Alibaba Dragonwell。


Java 老矣,尚能饭否?

Java 是最好的语言么?不是,由于在每一个领域都有更合适的编程语言。

C 语言无疑是现代计算机软件编程语言的王者,几乎全部的操做系统都是 C 语言写成的。C++ 是面向对象的 C 语言,一直在不断的改进。

JavaScript 是能运行在浏览器中的语言,丰富的前端界面离不开 Javascript 的功劳。近年来的 Node.js 又在后端占有一席之地。Python 用于系统管理,并经过高性能预编译的库,提供 API 来进行科学计算,文本处理等,是 Linux 必选的解释性语言。

Ruby 强于 DSL(领域特定语言),程序员能够定义丰富的语义来充分表达本身的思想。Erlang 就是为分布式计算设计的,能保证在大规模并发访问的状况下,保持强壮和稳定性。Go 语言内置了并发能力,能够编译成本地代码。当前新的网络相关项目,很大比例是由 Go 语言编写的,如 Docker、Kubernetes 等。

编写网页用 PHP,函数式编程有 Lisp,编写 iOS 程序有 Swift/ObjectiveC。

一句话归纳,能留在排行榜之上的语言,都是好的语言,在其所在的领域能作到最好。

那么,Java 语言到底有什么优点能够占据排行榜第一的位置呢?

其一,语法比较简单,学过计算机编程的开发者都能快速上手。

其二,在若干了领域都有很强的竞争力,好比服务端编程,高性能网络程序,企业软件事务处理,分布式计算,Android 移动终端应用开发等等。

最重要的一点是符合工程学的需求,咱们知道现代软件都是协同开发,那么代码可维护性,编译时检查,较为高效的运行效率,跨平台能力,丰富的 IDE,测试,项目管理工具配合。都使得 Java 成为企业软件公司的首选,也获得不少互联网公司的青睐。

没有短板,容易从市场上找到 Java 软件工程师,软件公司选择 Java 做为主要开发语言,再在特定的领域使用其余语言协做编程,这样的组合选择,确定是不会有大的问题。

因此综合而言,Java 语言全能方面是最好的。

随着 Java 每半年更新一次的脚步,Java 的新版本中也出现了愈来愈多与其余语言类似的特性,博采众长的 Java,还能继续保持生机,你以为呢?

相关文章
相关标签/搜索