Java SE 15 发布

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

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

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

  • 内置 支持EdDSA(Edwards-Curve Digital Signature Algorithm)数字签名创建算法 RFC 8032)。 所提出的EdDSA实现不依赖于硬件平台,免受旁道攻击(确保所有计算的恒定时间),并且在相同保护级别下,性能比现有的用C语言编写的ECDSA实现更快。 例如,使用具有 126 位密钥的椭圆曲线的 EdDSA 表现出与具有 secp256r1 椭圆曲线和 128 位密钥的 ECDSA 类似的性能。
  • 添加者 对密封类和接口的实验性支持,其他类和接口不能使用它们来继承、扩展或覆盖实现。 密封类还提供了一种比访问修饰符更具声明性的方法来限制超类的使用,基于显式列出允许扩展的子类。

    包 com.example.geometry;

    公共密封类形状
    允许 com.example.polar.Circle,
    com.example.quad.矩形,
    com.example.quad.simple.Square {…}

  • 添加者 支持不能被其他类的字节码直接使用的隐藏类。 隐藏类的主要目的是在运行时动态生成类并间接使用它们的框架中使用,通过 反射。 此类类通常具有有限的生命周期,因此维护它们以从静态生成的类进行访问是不合理的,并且只会导致内存消耗增加。 隐藏类还消除了对非标准 API sun.misc.Unsafe::defineAnonymousClass 的需求,该 API 预计将在将来删除。
  • ZGC(Z Garbage Collector)垃圾收集器已经稳定并被认为可以广泛使用。 ZGC 以被动模式运行,尽可能减少垃圾收集带来的延迟(使用 ZGC 时的停顿时间不超过 10 毫秒),并且可以处理小型和大型堆,大小范围从数百兆字节到数 TB。
  • 稳定并可供一般使用
    垃圾收集器 雪兰,以最少的暂停工作(低暂停时间垃圾收集器)。 Shenandoah 由 Red Hat 开发,因其使用的算法而闻名,该算法通过与 Java 应用程序的执行并行运行清理来减少垃圾收集期间的停顿时间。 垃圾收集器引入的延迟的大小是可预测的,并且不依赖于堆的大小,即对于 200 MB 和 200 GB 的堆,延迟将是相同的(不要出去 超过 50 毫秒,通常在 10 毫秒内);

  • 支持已稳定并引入到该语言中 文本块 - 一种新形式的字符串文字,允许您在源代码中包含多行文本数据,而无需使用字符转义并保留块中的原始文本格式。 该块由三个双引号引起来。

    例如,代替代码

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

    您可以指定:

    字符串 html = """


    »Java 1\
    在这儿!

    “””;

  • 重新设计 旧版 DatagramSocket API。 java.net.DatagramSocket 和 java.net.MulticastSocket 的旧实现已被替换为更易于调试和维护的现代实现,并且还与项目内开发的虚拟流兼容 织布机。 如果可能与现有代码不兼容,旧的实现尚未删除,可以使用 jdk.net.usePlainDatagramSocketImpl 选项启用。
  • 提议的第二次实验实施 模式匹配 在“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() 方法的实现。

  • 建议的 外部内存访问 API 的第二个预览版,允许 Java 应用程序通过操作新的 MemorySegment、MemoryAddress 和 MemoryLayout 抽象来安全、高效地访问 Java 堆外部的内存区域。
  • 残疾人 并弃用了 HotSpot JVM 中使用的偏向锁定优化技术,以减少锁定开销。 这项技术已经失去了与现代 CPU 提供的原子指令的系统的相关性,并且由于其复杂性而维护起来过于费力。
  • 宣布 过时的机制 RMI激活,这将在未来的版本中删除。 值得注意的是,RMI 激活已经过时,被归为 Java 8 中的一个选项类别,并且在现代实践中几乎从未使用过。
  • 已移除 JavaScript引擎 犀牛,它在 Java SE 11 中已弃用。
  • 已移除 Solaris OS 和 SPARC 处理器(Solaris/SPARC、Solaris/x64 和 Linux/SPARC)的端口。 删除这些端口将使社区能够加速 OpenJDK 新功能的开发,而无需浪费时间维护 Solaris 和 SPARC 特定功能。

来源: opennet.ru

添加评论