乐趣区

关于java:Java-16-正式发布

就在刚刚,Java 16 正式公布。

次要个性

Vector API(孵化)

晋升了 Java 在 CPU 向量计算的性能,这是对大规模的张量计算的反对,晋升了 Java 在 AI 畛域的能力。

启用了新的 C ++ 个性

容许在 JDK 中 C ++ 源代码中应用 C ++ 14 的新个性。

从 Mercurial 迁徙到 Git

Git 目前曾经成为代码版本治理畛域的相对统治者,当初 Java 顺应潮流也应用 Git 进行源代码治理。

迁徙到 GitHub

OpenJDK 的代码当初有 GitHub 托管。

ZGC 垃圾收集器

并发线程堆栈解决的垃圾收集器。

Unix 域套接字通道

Unix 域套接字对 ServerSocketChannelSocketChannel的反对。

Alpine Linux Port

在 x64 和 AArch64 体系结构上,将 JDK 移植到 Alpine Linux 以及其它应用 musl C 库的 Linxu 发行版上。

Elastic Metaspace

Hotspot 对类元数据的解决(metaspace- 元空间)有了很大的改良。占用空间缩小了,当初能够更快地将未应用的内存回收到操作系统。

Windows/AArch64 Port

将 JDK 移植到 Windows / AArch64 平台。

Foreign Linker API(孵化)

引入一个 API,该 API 提供对本地代码的动态类型的纯 Java 拜访。该 API 与 Foreign-Memory API(JEP 393)一起将大大简化绑定到本机库的本来容易出错的过程。

Warnings for Value-Based Classes

将原始包装器类指定为 基于值的类,并弃用其构造函数以将其删除,从而提醒新的弃用正告。提供无关在 Java 平台中不正确尝试在任何基于值的类的实例上进行同步的正告。

Packaging Tool

提供 jpackage 用于打包独立 Java 应用程序的工具。

  • 反对本地打包格局,认为最终用户提供天然的装置体验。这些格局包含 msiexe在 Windows,pkgdmg 在 MacOS,以及 debrpm在 Linux 上。
  • 容许在打包时指定启动工夫参数。
  • 能够从命令行间接调用,也能够通过ToolProviderAPI 以编程形式调用。

Foreign-Memory Access API (第三次孵化)

引入一个 API,容许 Java 程序平安无效地拜访 Java 堆之外的内部内存。

Pattern Matching for instanceof

在此之前 Java 中:

// 先判断类型
if (obj instanceof String) {
    // 而后转换
    String s = (String) obj;
    // 而后能力应用
}
复制代码

主动匹配模式中:

if (obj instanceof String s) {// 如果类型匹配 间接应用} else {// 如果类型不匹配则不能间接应用}
复制代码

Records Class

终于转正了,Java 类不再又臭又长。原来是这样的:

public class Range {

    private final int min;
    private final int max;

    public Range(int min, int max) {
        this.min = min;
        this.max = max;
    }

    public int getMin() {return min;}

    public int getMax() {return max;}

    @Override
    public boolean equals(Object o) {if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Range range = (Range) o;
        return min == range.min && max == range.max;
    }

    @Override
    public int hashCode() {return Objects.hash(min, max);
    }

    @Override
    public String toString() {
        return "Range{" +
          "min=" + min +
          ", max=" + max +
          '}';
    }
}
复制代码

当初能够简化为:

public record Range(int min, int max) {}
复制代码

以往的文章有具体介绍:

默认状况下严格封装 JDK

进步 JDK 的安全性和可维护性,跟一般开发者无关。

Sealed Classes

密封类,简略说就是被 final 润饰的类,密封类不能被继承,避免了歹意的派生。

另外 Oracle 发文对参加 JDK 16 奉献的公司和集体进行了感激。

Oracle 要感激为 ARM,SAP,Red Hat 和腾讯等组织工作的开发人员所做的杰出贡献。咱们也很快乐看到较小的组织(例如 Ampere Computing,Bellsoft,DataDog,Microdoc 和独立开发人员)的奉献,他们独特奉献了 Java 16 中 3%的修复程序。

咱们同样感激许多经验丰富的开发人员,他们审查了倡议的更改,尝试采纳晚期拜访版本并报告问题的晚期采纳者,以及在 OpenJDK 邮件列表中提供反馈的敬业业余人员。

参考:《2020 最新 Java 根底精讲视频教程和学习路线!》
链接:https://juejin.cn/post/694036…

退出移动版