最强JDK15 安装与讲解,有点想升级,终于要废弃偏向锁了( 二 )


5. 重新实现 DatagramSocket API重新实现旧版 DatagramSocket API,更简单、更现代的实现来代替java.net.DatagramSocket和java.net.MulticastSocketAPI 的基础实现,提高了 JDK 的可维护性和稳定性 。
新的底层实现将很容易使用虚拟线程,目前正在 Loom 项目中进行探索 。这也是 JEP 353 的后续更新版本,JEP 353 已经重新实现了 Socket API 。

最强JDK15 安装与讲解,有点想升级,终于要废弃偏向锁了

文章插图
 
6. 准备禁用和废除偏向锁在 JDK 15 中,默认情况下禁用偏向锁(Biased Locking),并弃用所有相关的命令行选项 。
后面再确定是否需要继续支持偏向锁,因为维护这种锁同步优化的成本太高了 。
7. 模式匹配(第二次预览)第一次预览是 JDK 14 中提出来的,点击这里查看我之前写的详细教程 。
Java 14 之前用法:
if (obj instanceof String) {    String s = (String) obj;    // 使用s}Java 14之后的用法:
if (obj instanceof String s) {    // 使用s}Java 15 并没有对此特性进行调整,继续预览特性,只是为了收集更多的用户反馈,可能还不成熟吧 。
8. ZGC 功能转正ZGC是一个可伸缩、低延迟的垃圾回收器 。
ZGC 已由JEP 333集成到JDK 11 中,其目标是通过减少 GC 停顿时间来提高性能 。借助 JEP 377,JDK 15 将 ZGC 垃圾收集器从预览特性变更为正式特性而已,没错,转正了 。
这个 JEP 不会更改默认的 GC,默认仍然是 G1 。
9. 文本块功能转正【最强JDK15 安装与讲解,有点想升级,终于要废弃偏向锁了】文本块,是一个多行字符串,它可以避免使用大多数转义符号,自动以可预测的方式格式化字符串,并让开发人员在需要时可以控制格式 。
文本块最早准备在 JDK 12 添加的,但最终撤消了,然后在 JDK 13 中作为预览特性进行了添加,然后又在 JDK 14 中再次预览,在 JDK 15 中,文本块终于转正,暂不再做进一步的更改 。
Java 13 之前用法,使用one-dimensional的字符串语法:
String html = "<html>n" +              "    <body>n" +              "        <p>Hello, world</p>n" +              "    </body>n" +              "</html>n";Java 13 之后用法,使用two-dimensional文本块语法:
String html = """              <html>                  <body>                      <p>Hello, world</p>                  </body>              </html>              """;10. Shenandoah 垃圾回收算法转正Shenandoah 垃圾回收从实验特性变为产品特性 。这是一个从 JDK 12 引入的回收算法,该算法通过与正在运行的 Java 线程同时进行疏散工作来减少 GC 暂停时间 。Shenandoah 的暂停时间与堆大小无关,无论堆栈是 200 MB 还是 200 GB,都具有相同的一致暂停时间 。
JDK 15 Shenandoah垃圾收集器从预览特性变更为正式特性而已,没错,又是转正了 。
11. 移除了 Solaris 和 SPARC 端口 。移除了 Solaris/SPARC、Solaris/x64 和 linux/SPARC 端口的源代码及构建支持 。这些端口在 JDK 14 中就已经被标记为 deprecated 了,JDK 15 被移除也不奇怪 。
12. 外部存储器访问 API(二次孵化)这个最早在 JDK 14 中成为孵化特性,JDK 15 继续二次孵化并对其 API 有了一些更新 。
目的是引入一个 API,以允许 Java 程序安全有效地访问 Java 堆之外的外部内存 。这同样是 Java 14 的一个预览特性 。
13. Records Class(二次预览)Records Class 也是第二次出现的预览功能,它在 JDK 14 中也出现过一次了,使用 Record 可以更方便的创建一个常量类,使用的前后代码对比如下 。


推荐阅读