Java开发工具包(JDK)14已发布到GA,已发布用于生产部署的通用版本。 升级到标准Java包括新功能,例如JDK Flight Recorder事件流,模式匹配和开关表达式。
JDK 14是Java的功能版本,而不是长期支持(LTS)版本,这是为Java设置了六个月的发布节奏 。 JDK 14将在4月和7月收到安全更新,然后由9月发布的非LTS版本的JDK 15取代。 当前的LTS版本是JDK 11 。
[ InfoWorld的2020年度技术奖获奖者:年度最佳软件开发,云计算,数据分析和机器学习产品 ]
JDK 14中的新功能和改进包括:
- JFR事件流提供了一个API,用于持续使用来自流程内和流程外应用程序的JFR数据。 JFR是一个用于在运行Java应用程序和JVM时收集性能分析和诊断数据的工具。 事件流建议记录与非流情况相同的事件集,并且如果可能,开销小于百分之一。 事件流必须与基于磁盘和基于内存的非流记录共存。 在这种情况下,HotSpot VM使用JFR发出500个以上的数据点,而其中的大多数数据仅可通过分析日志文件来使用,因此很容易激发这种提议。 当前,用户必须开始录制,停止录制,将内容转储到磁盘,然后解析录制文件。 这对于应用程序概要分析非常有效,但不适用于监视目的。 监控使用情况的一个示例是显示动态更新数据的仪表板。 创建记录会产生开销,例如将数据从磁盘存储库复制到单独的记录文件。 如果有一种方法可以在不创建新记录文件的情况下从磁盘存储库中读取正在记录的数据,则可以避免很多开销。
- 对
NullPointerExceptions
的计划改进涉及通过准确描述哪个变量为null来提高JVM生成的异常的可用性。 该提案的作者希望为开发人员和支持人员提供有关程序过早终止的有用信息,并通过更清楚地将动态异常与静态程序代码相关联来提高对程序的理解。 一个目标是减少混乱和开发人员对NullPointerExceptions
关注。 - 非易失性映射的字节缓冲区将添加新的特定于JDK的文件映射模式,该模式允许使用FileChannel API创建引用非易失性内存(NVM)的
MappedByteBuffer
实例。 NVM使程序员可以跨程序运行来构建和更新程序状态,而不会产生输入和输出操作通常需要的大量复制或翻译成本。 这对于交易程序而言尤其重要。 因此,此JDK增强建议的主要目标是确保客户端可以连贯且有效地从Java程序访问和更新NVM。 第二个目标是使用在Unsafe
类中定义的受限制的JDK内部API来实现此提交行为,因此可以由可能需要提交给NVM的MappedByteBuffer
其他类重用它。 另一个目标是允许现有API跟踪在NVM上映射的缓冲区,以进行监视和管理。 目标OS / CPU平台包括Linux / x64和Linux / AArch64。 - 开关表达式通过扩展
switch
简化编码,以便可以将其用作语句或表达式。 在JDK 12和JDK 13中都进行预览之后,开关表达式有望成为JDK 14的永久功能。开关表达式还为在switch
使用模式匹配做好了准备。 模式匹配使开发人员可以更简洁,安全地从对象中有条件地提取组件。 - G1垃圾回收器的NUMA感知内存分配,旨在提高大型计算机上的G1性能。
- 删除并发标记扫描(CMS)垃圾收集器,该垃圾收集器先前已弃用并计划删除。 CMS的后继者包括ZGC和Shenandoah 。
- 将ZGC移植到MacOS。 到目前为止,仅Linux才支持它。
- 删除
java.util.jar
软件包中的pack200和unpack200工具以及Pack200 API。 Java SE 11中不推荐使用所有这些功能,以便将来删除它们。 Pack200是JAR文件的压缩方案。 - 记录 ,它将提供一种紧凑的语法来声明为浅层不可变数据的透明持有者的类。 通过记录,可以轻松创建本质上是数据载体的类,而无需编写大量样板文件。 该提案指出,声明浅不可改变的,行为良好的名义数据聚合应该简单明了。
- 一种打包工具 ,处于开发的孵化阶段,用于打包自包含的Java应用程序。 该工具将基于JavaFX
javapackager
。 此类工具已包含在Java中,但作为删除JavaFX的一部分从JDK 11中删除。 - 通过为
instanceof
运算符进行模式匹配来增强语言。 这将是JDK 14中的预览功能。模式匹配允许更简洁和安全地表示程序中的通用逻辑,主要是从对象中有条件地提取组件。 可以使代码简短且类型安全。 - 文本块的第二个预览,这是一种多行字符串文字,它避免了大多数转义序列的需要,并以可预测的方式自动格式化字符串。 文本块将在需要时使开发人员可以控制格式,简化Java程序的编写,并增强字符串的可读性。 文本块在JDK 13中进行了预览; JDK 14迭代将添加转义序列以管理显式空白和换行控件。
- 不赞成使用Parallel Scavenge和Serial Old垃圾收集算法的组合。 Java维护者认为这种组合很少使用,但需要大量维护。
- 将ZGC(Z垃圾收集器)移植到Windows。 此功能在还原到提议的目标列表之后,再次移至正式目标列表。
- 外部存储器访问API ,引入了Java程序的API,可以安全有效地访问Java堆外部的外部存储器。 该API应该替代Java程序访问内存的主要途径,包括
nio.ByteBuffer
和sun.misc.Unsafe
。 新的API应该能够在各种内存上运行,包括本地内存,持久内存和托管堆。 API不可能破坏JVM的安全性。 内存释放应在源代码中明确。 该API有望帮助开发本机互操作支持,这是巴拿马项目的目标。 - 弃用Solaris / Sparc,Solaris / x64和Linux / Sparc端口 ,以在将来的发行版中将其删除。 放弃对这些端口的支持将使OpenJDK贡献者能够加速新功能的开发。 尽管Solaris和Sparc是Java最初的创建者Sun Microsystems的关键技术,但近年来,它们已被Linux OS和Intel处理器所取代。
[ 通过InfoWorld的App Dev Report新闻通讯了解软件开发中的热门话题 ]
在哪里下载JDK 14
您可以从jdk.java.net 下载 适用于Linux,Windows和macOS的开源JDK 14 。 您可以从Oracle.com下载Oracle商业Java SE 14下载。
From: https://www.infoworld.com/article/3436795/jdk-14-the-new-features-in-java-14.html