美文网首页
Java 16 正式发布

Java 16 正式发布

作者: 码农小胖哥 | 来源:发表于2021-03-17 06:59 被阅读0次

    就在刚刚,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邮件列表中提供反馈的敬业专业人员。

    参与JDK16处理Issues的组织

    关注公众号:码农小胖哥,获取更多资讯

    个人博客:https://felord.cn

    相关文章

      网友评论

          本文标题:Java 16 正式发布

          本文链接:https://www.haomeiwen.com/subject/uthscltx.html