3月16日,甲骨文即将发布Java16。甲骨文表示,现今为所有开发人员和企业提供Java16。

此外,根据甲骨文重要补丁更新(CPU)时间表,甲骨文JDK16将起码获得两次季度更新。此后,甲骨文JDK17面世。其实Java17将于2021年9月即将发布,并且早已提供了它初期的访问版本。

在转向六个月的发布周期后,Java16是甲骨文发布的第七个特点版本。甲骨文称,“在六个月的发布周期下,可用于生产的创新交付速率已大大增强”。

Java16累计修补了1897个问题,其中linux命令,有1397个由甲骨文工作人员完成,还有500个由个人开发人员和其他组织机构的开发人员贡献,包括ARM、SAP、RedHat和腾讯以及谷歌、英特尔、华为等。而一些大型组织也贡献了Java16中3%的修补,例如AmpereComputing、Bellsoft、DataDog、Microdoc和独立开发人员。

查看linux安装jdk版本_甲骨文 JDK 16 更新_Java 16 发布时间

甲骨文表示,“再次使用GPLv2和ClasspathException将Java16作为甲骨文OpenJDK版本提供,但是针对使用甲骨文JDK版本作为甲骨文产品或服务一部份的用户,或希望能获得商业支持的用户提供商业许可”。

Java16的新特点

伴随着数千个性能、稳定性和安全性更新,Java16为用户提供了十七项主要的提高/修改(称为JDK提高议案——JEP),包括三个孵化器模块和一个预览特点。

孵化器模块(IncubatorModule)中引入了一些提高,这是一种将非最终API和非最终工具交给开发人员的方式,该方式容许用户提供反馈,因而改善Java平台的质量。

同样,一些提高被作为JavaSE平台的预览特点、语言或VM特点引入,这种提高已完全指定、完全实现但不是永久性的。JDK特点版本中提供了这种提高,以促进开发人员按照实际使用情况提供反馈,这可能会造成它们在将来的版本中永久保留。这为用户提供了及时反馈的机会,并让工具供应商有机会在大量Java开发人员在生产中使用特点之前为其提供支持。

Java16随附的17个JEP分为六个不同类别:

新语言特点JEP394,适用于instanceof的模式匹配

模式匹配(PatternMatching)最早在Java14中作为预览特点引入,在Java15中还是预览特点。模式匹配通过对instacneof运算符进行模式匹配来提高Java编程语言。

模式匹配使程序中的通用逻辑(即从对象中有条件地提取组件)得以更简练、更安全地表示。

JEP395,记录

记录(Records)在Java14和Java15中作为预览特点引入。它提供了一种紧凑的句型来申明类,这种类是浅层不可变数据的透明持有者。这将大大简化这种类,并提升代码的可读性和可维护性。

JVM改进JEP376,ZGC并发线程处理

JEP376将ZGC线程栈处理从安全点转移到一个并发阶段,甚至在大堆上也容许在微秒内暂停GC安全点。清除ZGC垃圾搜集器中最后一个延后源可以极大地提升应用程序的性能和效率。

查看linux安装jdk版本_Java 16 发布时间_甲骨文 JDK 16 更新

JEP387linux vps,弹性元空间

此特点可将未使用的HotSpot类元数据(即元空间,metaspace)显存更快速地返回到操作系统,因而减少元空间的占用空间。具有大量类加载和卸载活动的应用程序可能会占用大量未使用的空间。新方案将元空间显存按较小的块分配,它将未使用的元空间显存返回给操作系统来提升弹性,进而提升应用程序性能并增加显存占用。

新工具和库JEP380,Unix-Domain套接字通道

Unix-domain套接字仍然是大多数Unix平台的一个特点,如今在Windows10和WindowsServer2019也提供了支持。此特点为java.nio.channels包的套接字通道和服务器套接字通道API添加了Unix-domain(AF_UNIX)套接字支持。它扩充了承继的通道机制以支持Unix-domain套接字通道和服务器套接字通道。Unix-domain套接字用于同一主机上的进程间通讯(IPC)。它们在很大程度上类似于TCP/IP,区别在于套接字是通过文件系统路径名而不是Internet合同(IP)地址和端标语轮询的。对于本地进程间通讯,Unix-domain套接字比TCP/IP环回联接更安全、更有效。

JEP392,打包工具

此特点最初是作为Java14中的一个孵化器模块引入的,该工具容许打包自包含的Java应用程序。它支持原生打包格式,为最终用户提供自然的安装体验,这种格式包括Windows上的msi和exe、macOS上的pkg和dmg,还有Linux上的deb和rpm。它还容许在打包时指定启动时参数,而且可以从命令行直接调用,也可以通过ToolProviderAPI以编程方法调用。注意jpackage模块名称从jdk.incubator.jpackage修改为jdk.jpackage。这将改善最终用户在安装应用程序时的体验,并简化了“应用商店”模型的布署。

为未来做好打算JEP390,对基于值的类发出警告

此特点将原始包装器类(java.lang.Integer、java.lang.Double等)指定为基于值的(类似于java.util.Optional和java.time.LocalDateTime),并在其构造器中添加forRemoval(自JDK9开始被弃用),这样会提示新的警告。在Java平台中尝试在任何基于值的类的实例上进行不正确的同步时,它会发出警告。

许多流行的开源项目早已在其源中删掉了包装构造器调用来响应Java9的弃用警告,但是鉴于“弃用移除”警告的急迫性,我们可以期望更多开源项目跟上这一脚步。

查看linux安装jdk版本_Java 16 发布时间_甲骨文 JDK 16 更新

JEP396,默认强封装JDK内部元素

此特点会默认强封装JDK的所有内部元素,但关键内部API(比如sun.misc.Unsafe)除外。默认情况下,使用初期版本成功编译的访问JDK内部API的代码可能不再起作用。鼓励开发人员从使用内部元素迁移到使用标准API的方式上,便于她们及其用户都可以无缝升级到将来的Java版本。强封装由JDK9的启动器选项–illegal-access控制,到JDK15默认改为warning,从JDK16开始默认为deny。(目前)依然可以使用单个命令行选项放宽对所有软件包的封装,将来只有使用–add-opens打开特定的软件包才行。

孵化器和预览特点JEP338,向量API(孵化器)

该孵化器API提供了一个API的初始迭代以抒发一些向量估算,这种估算在运行时可靠地编译为支持的CPU构架上的最佳向量硬件指令,因而获得优于同等标量估算的性能,充分借助单指令多数据(SIMD)技术(大多数现代CPU上都可以使用的一种指令)。虽然HotSpot支持手动向量化,而且可转换的标量操作集有限且易受代码修改的影响。该API将使开发人员才能轻松地用Java编撰可移植的高性能向量算法。

JEP389,外部链接器API(孵化器)

该孵化器API提供了静态类型、纯Java访问原生代码的特点,该API将大大简化绑定原生库的原先复杂且容易出错的过程。Java1.1就已通过Java原生插口(JNI)支持了原生方式调用查看linux安装jdk版本,但并不好用。Java开发人员应当才能为特定任务绑定特定的原生库。它还提供了外来函数支持,而无需任何中间的JNI黏合代码。

JEP393,外部储存器访问API(第3个孵化器)

在Java14和Java15中作为孵化器API引入的这个API使Java程序才能安全有效地对各类外部储存器(比如本机储存器、持久性储存器、托管堆储存器等)进行操作。它提供了外部链接器API的基础。

JEP397,密封类(第二预览)

查看linux安装jdk版本_Java 16 发布时间_甲骨文 JDK 16 更新

这个预览特点可以限制什么类或插口可以扩充或实现它们;它容许类或插口的作者控制负责实现它的代码;它还提供了比访问修饰符更具申明性的方法来限制对超类的使用。它还通过对模式进行详细的剖析来支持模式匹配的未来发展。

提高OpenJDK开发人员的生产力

其余修改对Java开发人员(使用Java编撰代码和运行应用程序的人员)不会直接可见,而只对Java开发人员(参与OpenJDK开发的人员)可见。

JEP347,启用C++14语言特点(在JDK源代码中)

它容许在JDKC++源代码中使用C++14语言特点,并提供在HotSpot代码中可以使用什么特点的具体指导。在JDK15中,JDK中C++代码使用的语言特点仅限于C++98/03语言标准。它要求更新各类平台编译器的最低可接受版本

JEP357,从Mercurial迁移到Git;JEP369查看linux安装jdk版本,迁移到GitHub

这种JEP将OpenJDK社区的源代码储存库从Mercurial(hg)迁移到Git,并将它们托管在GitHub上以供JDK11及更高版本使用,其中包括将jcheck、webrev和defpath工具等工具更新到Git。Git减少了元数据的大小(约1/4),可节约本地c盘空间并降低克隆时间。与Mercurial相比,现代工具链可以更好地与Git集成。

OpenJDKGit储存库现今坐落

JEP386,AlpineLinux移植;JEP388,Windows/AArch64移植

甲骨文 JDK 16 更新_查看linux安装jdk版本_Java 16 发布时间

这种JEP的重点不是移植工作本身,而是将它们集成到JDK主线储存库中;JEP386将JDK移植到AlpineLinux和其他使用musl作为x64上主要C库的发行版上。据悉,JEP388将JDK移植到WindowsAArch64(ARM64)。

工具链支持

工具链有助于提升开发人员的生产力。目前,对Java16提供支持的IDE有JetBrainsIDEA、EclipseIDE。

甲骨文表示,“我们继续欢迎领先的IDE供应商所做的努力,这种供应商的工具链解决方案为开发人员提供了对当前Java版本的支持”。

写在最后:

今年,Java迎来25华诞。按照IDC的最新报告“JavaTurns25”显示,超过900万名开发人员(全球专职开发人员中的69%)在使用Java——比其他任何语言都多。凭着自身不断提升平台性能、稳定性和安全性的能力,Java仍然是开发人员中最流行的编程语言,被誉为“宇宙第一语言”。

甲骨文在博文写道:

经过二十多年的持续创新,Java仍然在通过适应不断变化的技术格局来保持灵活性,同时维持平台独立性;通过保持向后兼容性来保证可靠性;在不牺牲安全性的前提下加速创新来保持优势。

但是,这并非意味着Java可以“高枕无忧”。关于Java的未来,可以查看《云原生时代,Java的危与机》。

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复