Java SE 14 发布

经过六个月的开发,Oracle 发布 一个平台 JavaSE 14 (Java 平台,标准版 14),开源 OpenJDK 项目用作参考实现。 Java SE 14 保持了与以前版本的 Java 平台的向后兼容性;所有以前编写的 Java 项目在新版本下运行时都将无需更改即可运行。 准备安装 Java SE 14 版本(JDK、JRE 和 Server JRE) 准备好的 适用于 Linux (x86_64)、Windows 和 macOS。 OpenJDK项目开发的参考实现 Java 14的 在 GPLv2 许可证下完全开源,GNU ClassPath 例外允许与商业产品动态链接。

Java SE 14 被归类为常规支持版本,并将继续接收更新,直到下一个版本。 长期支持 (LTS) 分支应该是 Java SE 11,它将继续接收更新直到 2026 年。 Java 8 之前的 LTS 分支将支持到 2020 年 2021 月。 下一个 LTS 版本计划于 10 年 XNUMX 月发布。 让我们提醒您,从Java XNUMX发布开始,该项目切换到了新的开发流程,这意味着新版本的形成周期更短。 现在,新功能是在一个不断更新的主分支中开发的,其中包括现成的更改,并且每六个月从该分支分支一次以稳定新版本。

创新 Java 14的 人们可以 标记:

  • 添加了实验支持 模式匹配 在“instanceof”运算符中,它允许您立即定义一个局部变量来访问检查的值。 例如,您可以立即编写“if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}”,而无需显式定义“String s = (String) obj”。

    是:

    if (obj实例组) {
    组group = (组) obj;
    var 条目 = group.getEntries();
    }

    现在你可以不用定义“Group group = (Group) obj”:

    if (obj instanceof Group 组) {
    var 条目 = group.getEntries();
    }

  • 添加了对新关键字“的实验性支持”记录”,它为定义类提供了一种紧凑的形式,允许您在数据仅存储在行为不变的字段中的情况下避免显式定义各种低级方法,例如 equals()、hashCode() 和 toString()。 当一个类使用 equals()、hashCode() 和 toString() 方法的标准实现时,它可以不需要它们的显式定义:

    公共记录 BankTransaction(LocalDate 日期,
    双倍金额
    字符串描述){}

    除了构造函数和 getter 方法之外,此声明还会自动添加 equals()、hashCode() 和 toString() 方法的实现。

  • 标准化 默认启用对新形式“switch”表达式的支持,不需要指定“break”运算符,允许您组合重复的标签,不仅可以以运算符的形式使用,还可以作为表达。

    var log = switch (事件) {
    case PLAY -> “用户已触发播放按钮”;
    case STOP、PAUSE ->“用户需要休息一下”;
    默认 -> {
    字符串消息 = event.toString();
    LocalDateTime now = LocalDateTime.now();
    产生“未知事件”+消息+
    » 已登录 » + 现在;
    }
    };

  • 扩大实验支持 文本块 - 一种新形式的字符串文字,允许您在源代码中包含多行文本数据,而无需使用字符转义并保留块中的原始文本格式。 该块由三个双引号引起来。 在 Java 14 中,文本块现在支持转义序列“\s”来定义单个空格和“\”来连接下一行(当您需要打印很长的行时忽略换行符)。 例如,代替代码

    字符串 html = " » +
    “\n\t”+“ » +
    "\n\t\t" + " “Java 1 来了!” » +
    “\n\t”+“ » +
    “\n”+“ ”;

    您可以指定:

    字符串 html = """


    »Java 1\
    在这儿!

    “””;

  • 扩展了异常发生时诊断的信息内容 空指针异常。 以前的错误消息仅涉及行号,现在它详细说明了导致异常的方法。 当前仅当使用“-XX:+ShowCodeDetailsInExceptionMessages”标志启动时才启用高级诊断。 例如,当指定此标志时,行中的异常

    var name = user.getLocation().getCity().getName();

    将导致一条消息

    线程“main”中的异常 java.lang.NullPointerException:无法调用“Location.getCity()”
    因为“User.getLocation()”的返回值为null
    在 NullPointerExample.main(NullPointerExample.java:5):5)

    这清楚地表明 Location.getCity() 方法未被调用并且 User.getLocation() 返回 null。

  • 实施的 jpackage 实用程序的预览,它允许您为独立的 Java 应用程序创建包。 该实用程序基于 JavaFX 的 javapackager,允许您以各种平台本机格式创建包(Windows 为 msi 和 exe,macOS 为 pkg 和 dmg,Linux 为 deb 和 rpm)。 这些包包含所有必需的依赖项。
  • 到G1垃圾收集器 添加 一种新的内存分配机制,考虑到使用该架构在大型系统上工作的具体情况 NUMA。 新的内存分配器使用“+XX:+UseNUMA”标志启用,可以显着提高 NUMA 系统的性能。
  • 额外 用于动态监控 JFR(JDK 飞行记录器)事件的 API,例如用于组织连续监控。
  • 额外 jdk.nio.mapmode 模块,提供新模式(READ_ONLY_SYNC、WRITE_ONLY_SYNC)来创建引用非易失性内存(NVM)的映射字节缓冲区(MappedByteBuffer)。
  • 实施的 外部内存访问 API 的预览版,允许 Java 应用程序通过操作新的 MemorySegment、MemoryAddress 和 MemoryLayout 抽象来安全、高效地访问 Java 堆外部的内存区域。
  • 已公布 已弃用 Solaris OS 和 SPARC 处理器(Solaris/SPARC、Solaris/x64 和 Linux/SPARC)的端口,并打算在将来删除这些端口。 弃用这些端口将使社区能够加速 OpenJDK 新功能的开发,而无需浪费时间维护 Solaris 和 SPARC 特定功能。
  • 已移除 CMS(并发标记扫描)垃圾收集器,两年前就被标记为过时并且一直无人维护(CMS 很早之前就被 G1 垃圾收集器取代)。 除了, 公布 不推荐使用 ParallelScavenge 和 SerialOld 垃圾收集算法的组合(使用选项“-XX:+UseParallelGC -XX:-UseParallelOldGC”运行)。
  • macOS 和 Windows 平台上已经提供了对 ZGC(Z Garbage Collector)垃圾收集器的实验性支持(之前仅在 Linux 上支持)。 ZGC 以被动模式运行,尽可能减少垃圾收集带来的延迟(使用 ZGC 时的停顿时间不超过 10 毫秒),并且可以处理小型和大型堆,大小范围从数百兆字节到数 TB。
  • 已移除 使用 Pack200 算法压缩 JAR 文件的工具包和 API。

来源: opennet.ru

添加评论