
整理|苏宓出品|CSDN(ID:CSDNnews)时隔六个月,9月20日,Java19如期而至,这一版本是自Oracle宣布Java以六个月为一周期发布的第十个版本。不过值得注意的是,JDK19是标准......
整理|苏宓
出品|CSDN(ID:CSDNnews)
时隔六个月,9月20日,Java19如期而至,这一版本是自Oracle宣布Java以六个月为一周期发布的第十个版本。不过值得注意的是,JDK19是标准的非LTS(长期支持)版本。
话不多说,我们先来一起看一下最新版本的Java带来了哪些更新?


Java19的七大亮点更新
根据官方发布的公告显示,Java19版本带来了七大主要功能更新,包括结构化并发、记录模式、外部函数和内存API的预览,以及对开源的Linux/RISC-V指令集架构(ISA)的支持。除了Linux/RISC-V功能,所有的功能都处于预览或孵化阶段。
具体来看:
结构化并发。当前还处于孵化阶段,旨在通过结构化并发API简化多线程编程。这种并发性将不同线程中运行的多个任务视为单个工作单元,从而简化错误处理、提高可靠性和可观察性。这个功能来自ProjectLoom,它引入了一个新的轻量级并发模型。
记录模式,这一功能目前也处于预览版,主要是用来解构记录值。记录模式和类型模式可以被嵌套,以实现强大的、具有声明性的和可组合的数据导航和处理形式。该提案的目标包括扩展模式匹配,用以表达更复杂的、可组合的数据查询,同时不改变类型模式的语法或语义。该提案建立在2021年3月在JDK16中交付的模式匹配的基础上。未来,Oracle可能会要求对记录模式进行扩展,使之具备数组模式、Vararg模式。记录模式是ProjectAmber的一部分,该项目旨在探索和孵化较小的、面向生产力的Java功能。
外部函数和内存API的预览版。通过引入一个API,Java程序可以与Java运行时之外的代码和数据进行互操作。通过有效地调用外部函数(即JVM之外的代码)和安全地访问外部内存(即不由JVM管理的内存),该API使Java程序能够调用本地库并处理本机数据,而不会出现Java本地接口(JNI)的危险和脆弱。外部函数和内存API结合了两个早期的孵化API:外部内存访问API和外部链接器API。外部函数和内存API曾在JDK17中孵化,而后在JDK18中重新孵化。该提案的目标包括易用性、性能、通用性和安全性。
虚拟线程的预览版。这是一种轻量级的线程,大大减少了编写、维护和观察高吞吐量并发应用的工作量。可以以简单的thread-per-request风格编写的服务器应用程序能够以接近最佳的硬件利用率进行扩展,通过使用现有代码能够以最小的改动采用虚拟线程,并基于现有的JDK工具对虚拟线程进行故障诊断、调试和分析。本提案的目标不是要改变Java的基本并发模型,也不是要在Java语言或Java库中提供新的数据并行结构。它的目标也不是去除线程的传统实现,或默默地将现有的应用程序迁移到使用虚拟线程。这项功能也是ProjectLoom的一部分。
对switch表达式和语句的模式匹配进行了第三次预览。这项功能以前在JDK17、JDK18中进行过预览。这一次在JDK19中将进一步细化功能,包括用switch块中的when子句替换受保护的模式。另外,当选择器表达式的值为时,模式切换的运行时语义与传统的语义更加一致。这项功能也是Amber项目的一部分。
VectorAPI的第四次孵化,将表达向量计算,在运行时可靠地编译为支持的CPU架构上的最佳向量指令,从而实现优于等效标量计算的性能。该API的开发者使用HotSpot自动矢量器,可获得了一种在Java中编写复杂的向量算法的方法,但有一个用户模型,使向量化更可预测和稳健。VectorAPI先前已被纳入JDK16、JDK17和JDK19。在最新的JDK19中,官方为该功能增加了两个跨道向量操作,即压缩和扩展,以及一个互补的向量掩码压缩操作。压缩向量操作将由掩码选择的源向量的通道按通道顺序映射到目标向量,而扩展操作则做相反的操作。压缩操作在过滤查询结果时非常有用。
通过Linux/RISC-V移植,目前这一功能已正式可用。Java将获得对硬件指令集的支持,该指令集已经被广泛的语言工具链所支持。RISC-V实际上是一系列相关的ISA。Linux/RISC-V端口将只支持RISC-V的RV64GV配置,这是一个包括矢量指令的通用64位ISA。Java的开发者可能会在将来考虑其他RISC-V的配置。
除了以上功能更新之外,甲骨文公司Java平台开发高级副总裁、OpenJDK管理委员会主席GeorgesSaab表示,最新的Java版本还修复了一千多处错误,提高了语言的稳定性和性能。不过,Saab称,Java客户经常推迟升级,因为他们看了功能列表,没有看到他们明显需要的东西。但他敦促Java开发者跟上程序,"因为一切都会变得更好"。

Java有望在三年内成为最频繁使用的编程语言平台
事实上,近几年间,在Python火速升温之下,关于Java大厦将倒、步入下坡路等言论不绝于耳,很多人认为Java的使用率已大不如以前。
不过,在这边发布Java19之际,Oracle也在官方博客上发布了一篇《Javais#1choiceforcloudaccordingtoVDCResearch》的文章,似乎在为Java“站台”,其中引用了咨询公司VDCResearch的一份关于Java在企业中使用和重要性的研究报告。
该研究报告考察了当今主流的20多种顶级编程语言,发现Java仍然是顶级技术趋势中排名第一的语言,也是开发者信任的解决安全问题的最高评级语言。

这份报告数据显示,企业在不使用Java的项目通常比使用Java的项目要多花费22%的成本。

同时,Java有望在三年内成为最频繁使用的编程语言平台,超过JavaScript、C++和Python等。云开发人员将Java列为对其组织运营最重要的语言。这对于涉及在云端开发或部署的项目来说是真实的。
这份报告指出,多年来,Java在云计算生态系统中的地位一直在提高,基于云计算的JVM现在正处于每年增长12.5%的轨道上,到2025年将达到820亿的活跃安装基数。
毋庸置疑,在企业级应用以及云生态系统中,至今还未有一种语言能够超越Java。然而,Oracle内部对Java更新频率的加快,让不少开发者报以“你更新任你更新,我就不用”的态度,也让很多人成为Java8、Java11等老版本的“钉子户”。
我们确实意识到,并不是每个人都想每六个月重新发布一次。因此,我们所做的一件重要的事情是为长期支持提供JavaSE订阅服务,基本上使那些希望保持在一个版本上并每季度得到更新以保持其安全性的企业(可以这样做)。”

你是否会升级到最新版本的Java?
每年在Java最新版本到来之际,也有不少人陷入了“升级or不升级”的纠结中。根据知名科技公司NewRelic之前发布的《Java生态系统状况报告》显示,2018年9月发布的Java11是目前最受欢迎的Java版本(48%),其次是2014年3月发布的Java8(46%),两者都是长期支持(LTS)版本。

每个JavaLTS版本的使用百分比
最新的一个长期版本Java17排名还不是很高,但它在发布后的几个月里,已经超过了Java6、Java10和Java16版本的占比。
此前,Oracle还提议将JDKLTS的发布周期从每三年一次改为每两年一次。如果该提案被接受,这意味着JDK17之后的下一个JDKLTS版本将是JDK21,而不是JDK23。
因此,相较非LTS版本,LTS版本带来的稳定支持更受Java开发者欢迎一些,那么,你当前正在使用哪个版本的Java呢?这一次Java19发布,你会去尝鲜吗?
参考:
