Java 12 发布了,决定Java未来的三大主要项目!

Java 12 发布了,没有引起很大的讨论。对于 Java 这样一门成熟的语言来说,每一次更新似乎都无法满足庞大的 Java 开发群体与生态圈。再加上 Oracle 对 Java 耐人寻味的态度,Java 的未来会如何?
Java 的变化速度从未如此之快——如今,该语言的新版本每六个月就会发布一次。

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

而发展道路中的以下三大主要项目,将有助于确定 Java 的未来方向。

一、Loom 项目

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

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

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

他在大会上指出,“利用 fibers,如果我们确保其轻量化程度高于内核提供的线程,那么问题就得到了解决。大家将能够尽可能多地使用这些用户模式下的轻量级线程,且基本不会出现任何阻塞问题。”

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

根据说明文档所言,fibers 将使用与 Java 现有 Thread 类非常相似的 API,这意味着 Java 开发人员的学习曲线应该不会太过陡峭。

二、Amber 项目

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

这套方案非常适合自 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;
}

三、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。

英文原文
https://www.techrepublic.com/article/future-of-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,还能继续保持生机,你觉得呢?

原文地址:https://blog.51cto.com/13754022/2375031

时间: 2024-11-05 16:08:24

Java 12 发布了,决定Java未来的三大主要项目!的相关文章

Gradle 1.12用户指南翻译——第46章. Java 库发布插件

文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc 本文翻译所在分支: https://github.com/msdx/gradledoc/tree/1.12. 直接浏览双语版的文档请访问: http://gradledoc.qiniudn.com/1.12/usergu

尝鲜Java 12新特性:switch表达式

Java 12将在两个月后(2019/3/19)发布,现已进入RDP1阶段,确定加入8个JEP.其中对Java语法的改进是JEP 325: switch表达式.于是我迫不及待,提前感受一下更先进的语言特性. 因为12没有正式发布,本文使用自己编译的OpenJDK.嫌麻烦的话,也可以直接使用官方的ea版本.JEP325是预览(preview)特性,编译运行时需要添加--enable-preview参数. 顾名思义,这个feature是对switch动手脚的.包括两个方面. 1. 简化fall-th

Java程序发布到Linux

业务需要,要把Java程序发布到Linux. 1.发布 选择export->Runnable JAR file 2.linux安装jdk 上传用安装包,直接安装....rpm -ivh 安装包名 java -version测试 配置环境变量,查教程去... 3.执行jar 上传jar包到linux系统 java -jar jar名称

RxJava 2.0.0-RC1 发布,支持 Java 6

RxJava 2.0.0-RC1 发布了,RxJava 是 ReactiveX 在 Java 上的实现,有Groovy, Clojure, Scala 和 JRuby 版本的实现. 该版本为了更高的性能和更低的开销已经完全重写,依然支持 Java 6,点击查看提交记录以及发布说明: https://github.com/ReactiveX/RxJava/commits/1.x https://github.com/ReactiveX/RxJava/releases/tag/v2.0.0-RC1

Java 8 停止维护,Java 9 难产,IDEA 2018 发布,还有……

祝大家五一劳动节快乐,工作顺利! 又到了总结上个月干货的时候了,这个月我们带来了各种Java技术干货,各种送书抽奖福利,各种面试题分享,各种最新动态资讯等. 5.1重磅活动 | 区块链免费送书 & 星球特价 Java 程序打日志的正确姿势 史上最全 BAT 大厂面试题整理 BAT Java面试题答案分解 Java 9 被无情抛弃,直接升级到 Java 10 高级 Java 面试通关知识点整理 Java生成随机数的几种高级用法 天了噜,Java 8 要停止维护了 Java成神之路技术干货整理 Sp

Java 10 发布,是时候关注 Kotlin 了

Java 10 发布了,对于广大程序员来说,算是个大新闻.毕竟在程序员的世界里,Java 仍然保持了一哥的地位,也就是说,这个世界上使用 Java 语言编程的程序员可能是最多的.不过最近 Java 大版本更新的速度确实让老程序员们瞠目结舌.十八年前,也就是千禧年 2000,Sun 公司像神经病一样连续在 5 月份推出了 JKD1.3 和 1.4,按照现在的版本规则,也就是 Java 3 和 4.四年以后 Java 5 发布,那是 2004 年,这种发布节奏让程序员完全找不到节奏,以至于 Java

.Net Core 2.2与Java 12性能对比

我发现基准游戏(https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/csharp.html)是一套非常好的基准测试.基准测试经过深思熟虑,涵盖了经典的单线程计算到多线程IO数据处理.显然,在这种基准游戏中,诸如网络性能等领域并不容易测试.组织者是艰难但公平的,规则很有意义.这些基准确实可以解决比我见过的大多数现实问题. 总体印象是.Net Core 2.2要比Java 12 的表现好很多. 原文地址:https:

2019年12月20日 java学习知识记录

一个"java"源文件中是否可以有多个类? 有什么限制? 一个java的源文件中都可以都多个类 ,但是public的类只能有一个  而且public的名字要和文件名一致(大小写也得一致) java 有没有 goto? java中有goto 但是现在java中不使用 &和&&有什么区别? &和&&都是逻辑运算符 运算符两边的表达式,如果运算结果都是true的话,结果返回就为true   如果有一边的运算结果为false,那么结果返回的就为f

Java学习(一)---Java初识

一.Java介绍 关于Java的诞生和发展网上比较多,在此就不再赘述了,可以参考http://i.cnblogs.com/EditArticles.aspx?postid=4050233. 1.1 Java的开发平台JDK 1.1.1 JDK 1.0----JRE+JDK 1995年,Sun虽然推出了Java,但这只是一种语言,如果想开发复杂的应用程序,必须要有一个强大的开发类库.因此,Sun在1996年初发布了JDK 1.0.这是Sun公司发布的第一版JDK,这个版本包括两部分: JRE 运行