25 岁的 Java
2020 年是 Java 诞生的第 25 个年头。在过去的这些年中,Java 在过去增强功能的推动下为用户提供了超过二十年的创新,例如 Java 5 中的泛型,Java 8 中的 Lambda 和 Java 9 中的模块,这些迭代提高了 Java 平台的性能,稳定性和安全性。
Java 虽然 25 岁了,但是依然持续着创新之道。九月 15 日 Oracle 宣布 JDK15 正式发布。这是 Java 迭代周期缩短为六个月以后的第六个版本。随着迭代速度的加快,让 Java 的设计开发测试人员能够更加轻松的面对迭代中的变化。
在六个月的节奏下,交付可用于生产的 JDK 新版本的速度已大大提高。而不是每隔几年在大型主要版本中发布成千上万的修复程序和大约一百个 JDK 增强建议(JEP)。
Java JEP数量随着迭代的加速更加容易应对
JDK Enhancement Proposals : 简称 JEP,JDK 增强建议,就是 JDK 的特性新增和改进提案。
另外 OpenJDK 社区也对 JDK15 的诞生做出了重要贡献,里面除了我们耳熟能详的科技巨头还有一些小组织机构和独立开发者。
参与JDK15 ISSUES修复的组织
Oracle 依旧是 JDK 开发的主力军,完成了 79.68%的工作量,其次是开源巨头红帽。国内企业贡献最多的居然是腾讯公司,被 Oracle 点名感谢。阿里巴巴和华为也做出了不可磨灭的贡献。Java 有中国科技力量的贡献能大大提升中国 IT 的硬实力。
Java 15 为用户提供了十四项主要的增强/更改,包括一个孵化器模块,三个预览功能,两个不推荐使用的功能以及两个删除功能。
新加入 Edwards-Curve 数字签名算法(EdDSA)实现加密签名。在许多其它加密库(如 OpenSSL 和 BoringSSL)中得到支持。与 JDK 中的现有签名方案相比,EdDSA 具有更高的安全性和性能。这是一个新的功能。
此功能可帮助需要在运行时生成类的框架。框架生成类需要动态扩展其行为,但是又希望限制对这些类的访问。隐藏类很有用,因为它们只能通过反射访问,而不能从普通字节码访问。此外,隐藏类可以独立于其他类加载,这可以减少框架的内存占用。这是一个新的功能。
重新实现旧版 DatagramSocket API,更简单、更现代的实现来代替java.net.DatagramSocket
和java.net.MulticastSocket
API 的基础实现,提高了 JDK 的可维护性和稳定性。
ZGC 已由JEP 333集成到JDK 11 中,其目标是通过减少 GC 停顿时间来提高性能。借助 JEP 377,ZGC 从预览功能转变为生产功能。
文本块由JEP 355在 2019 年提出。文本块是一种多行字符串文字,它避免了大多数转义序列的需要,以一种可预测的方式自动设置字符串的格式,并在需要时使开发人员可以控制格式。借助 JEP 378,文本块已成为 Java 语言的永久功能。
Shenandoah 垃圾回收从实验特性变为产品特性。这是一个从 JDK 12 引入的回收算法,该算法通过与正在运行的 Java 线程同时进行疏散工作来减少 GC 暂停时间。Shenandoah 的暂停时间与堆大小无关,无论堆栈是 200 MB 还是 200 GB,都具有相同的一致暂停时间。
用于限制超类的使用,密封的类和接口限制其它可能继承或实现它们的其它类或接口。这是新的预览特性。
在此之前 Java 中:
// 先判断类型
if (obj instanceof String) {
// 然后转换
String s = (String) obj;
// 然后才能使用
}
自动匹配模式中:
if (obj instanceof String s) {
// 如果类型匹配 直接使用
} else {
// 如果类型不匹配则不能直接使用
}
这是第二次预览该功能,我们已经在 Java 14 中首次预览过该特性。
这个也是第二次预览,我对这个功能做过详细的介绍,你可以在 Java 14 新特性之 JEP 359 Records 一文中详细了解它。
目的是引入一个 API,以允许 Java 程序安全有效地访问 Java 堆之外的外部内存。这同样是 Java 14 的一个预览特性。
其它还有一些弃用和不建议使用的功能,比如移除了 Nashorn JavaScript 引擎,同时也移除了删除 Solaris 和 SPARC 端口。并标记了一些弃用功能。